Jenis phantom di Swift

Tidak semua bahasa dengan sistem tipe statis sekuat Swift. Hal ini dimungkinkan oleh fitur Swift seperti tipe hantu, ekstensi tipe generik, dan enumerasi dengan tipe terkait. Minggu ini kita akan mempelajari cara menggunakan tipe hantu untuk membuat API yang aman bagi tipe.





Dasar

 — , , , . API. .





struct Identifier<Holder> {
    let value: Int
}
      
      



Identifier Holder. , Holder Identifier. . .





struct User {
    let id: Identifier<Self>
}

struct Product {
    let id: Identifier<Self>
}

let product = Product(id: .init(value: 1))
let user = User(id: .init(value: 1))

user.id == product.id
      
      



User () Product (), Identifier. 1 user product. , Swift :





«==» Identifier-User Identifier-Product.





, «» «». . Swift . , Swift .





func fetch(_ product: Identifier<Product>) -> Product? {
    // return product by id
}

fetch(user.id)
      
      



HealthKit

. . , HealthKit Apple Watch. , Apple Health.





import HealthKit

let store = HKHealthStore()
let bodyMass = HKQuantityType.quantityType(
    forIdentifier: HKQuantityTypeIdentifier.bodyMass
)!
let query = HKStatisticsQuery(
    quantityType: bodyMass,
    quantitySamplePredicate: nil,
    options: .discreteAverage
) { _, statistics, _ in
    let average = statistics?.averageQuantity()
    let mass = average?.doubleValue(for: .meter())
}

store.execute(query)
      
      



Apple Health. . , , . , API.





enum Distance {
    case mile
    case meter
}

enum Mass {
    case pound
    case gram
    case ounce
}

struct Statistics<Unit> {
    let value: Double
}


extension Statistics where Unit == Mass {
    func convert(to unit: Mass) -> Double {

    }
}

extension Statistics where Unit == Distance {
    func convert(to unit: Distance) -> Double {

    }
}

let weight = Statistics<Mass>(value: 75)
weight.convert(to: Distance.meter)
      
      



HealthKit, API . Mass () Distance (), . , Swift , :





Distance Mass.





, Swift. , . API . , . Twitter . !






"iOS Developer. Professional", - : "Machine Learning iOS CoreML CreateML".





-









All Articles