Swift 3'ün #keyPath()
uygulamasını bulmasından çok memnun oldum, bu da yazım hatalarını ortadan kaldıracak ve anahtar yolunun gerçekte var olduğu derleme zamanında uygulanacak. El ile dizeleri yazmaktan çok daha iyi. #keyPath() öğesine iletilen dize olmayan "özellik adı" bağımsız olarak kaydedilebilir mi?
class MyObject {
@objc var myString: String = "default"
}
// Works great
let keyPathString = #keyPath(MyObject.myString)
https://github.com/apple/swift-evolution/blob/master/proposals/0062-objc-keypaths.md
bir "özellik adı" olarak#keyPath()
teslim ediliyorlar.
özelliği adı
Amaç-C çalışma zamanı mevcut olan bir özellik, bir referans olmalıdır. Derleme zamanında, anahtar yol ifadesi bir dizgi değişmeziyle değiştirilir.
Bu "özellik adı" nı bağımsız olarak kaydetmek mümkün mü, sonra bir String oluşturmak için #keyPath()
numarasına geçmek mümkün mü?
let propertyName = MyObject.myString // error. How do I save?
let string = #keyPath(propertyName)
Belirli bir Tür'e ait bir özellik adı gerektiren herhangi bir destek var mı?
// something like this
let typedPropertyName: MyObject.PropertyName = myString // error
let string = #keyPath(typedPropertyName)
nihai hedef anahtar yolu için bir NSExpression
gerektiren API'larla ile etkileşim olacaktır. Rasgele anahtar yol dizeleri yerine, geçerli bir Özellik Adını parametre olarak alan kolaylık yöntemleri yazmak istiyorum. İdeal olarak, belirli bir Tür tarafından uygulanan bir Özellik Adı.
func doSomethingForSpecificTypeProperty(_ propertyName: MyObject.PropertyName) {
let keyPathString = #keyPath(propertyName)
let expression = NSExpression(forKeyPath: keyPathString)
// ...
}
Swift 4'ün: Bu amaçlarla
hızlı 4'te bunun için kısa kod şuna benzer için jenerik Ana yol kullanabilirsiniz [Akıllı KeyPaths: Daha iyi Anahtar Değer Swift için Kodlama]:/(https /github.com/apple/swift-evolution/blob/master/proposals/0161-key-paths.md) daha iyi bir seçenek ekliyor gibi görünüyor. Bunu cevaplamadan önce yazmak istediğinde cevabı kabul eder. – pkamb
https://bugs.swift.org/browse/SR-5220 - "KeyPath'in dize gösterimini almak için API'yi aç" – pkamb
https://github.com/kishikawakatsumi/Kuery - "Kullanarak güvenli tipte bir Çekirdek Veri sorgusu API'sı Swift 4'ün Akıllı KeyPaths " – pkamb