Tôi rất vui khi thấy Swift 3 thực hiện #keyPath()
, điều này sẽ loại bỏ lỗi chính tả và thực thi tại thời gian biên dịch mà đường dẫn chính thực sự tồn tại. Tốt hơn nhiều so với nhập chuỗi bằng tay.Tên "đặc tính" không phải là chuỗi được chuyển đến #keyPath() có được lưu độc lập không?
https://github.com/apple/swift-evolution/blob/master/proposals/0062-objc-keypaths.md
class MyObject {
@objc var myString: String = "default"
}
// Works great
let keyPathString = #keyPath(MyObject.myString)
Các Swift docs list the type được thông qua vào #keyPath()
như là một "tên tài sản".
Tên thuộc tính phải là một tham chiếu đến một tài sản có sẵn trong thời gian chạy Objective-C. Tại thời gian biên dịch, biểu thức đường dẫn khóa được thay thế bằng một chuỗi ký tự.
Có thể lưu "tên thuộc tính" độc lập này không, sau đó chuyển đến #keyPath()
để tạo chuỗi?
let propertyName = MyObject.myString // error. How do I save?
let string = #keyPath(propertyName)
Có hỗ trợ nào để yêu cầu tên thuộc tính thuộc Loại cụ thể không?
// something like this
let typedPropertyName: MyObject.PropertyName = myString // error
let string = #keyPath(typedPropertyName)
Mục tiêu cuối cùng sẽ tương tác với API yêu cầu NSExpression
cho đường dẫn chính. Tôi muốn viết các phương thức tiện lợi có một Tên thuộc tính hợp lệ làm tham số, chứ không phải là các chuỗi đường dẫn khóa ngẫu nhiên. Lý tưởng nhất, một tên thuộc tính được thực hiện bởi một loại cụ thể.
func doSomethingForSpecificTypeProperty(_ propertyName: MyObject.PropertyName) {
let keyPathString = #keyPath(propertyName)
let expression = NSExpression(forKeyPath: keyPathString)
// ...
}
Swift 4 của [KeyPaths thông minh: Better Key-Value Mã hóa cho Swift] (https://github.com/apple/swift-evolution/blob/master/proposals/0161-key-paths.md) dường như thêm tùy chọn tốt hơn. Sẽ chấp nhận câu trả lời đó nếu có ai đó muốn viết nó trước khi tôi nhận được nó. – pkamb
https://bugs.swift.org/browse/SR-5220 - "Hiển thị API để truy xuất biểu diễn chuỗi của KeyPath" – pkamb
https://github.com/kishikawakatsumi/Kuery - "API truy vấn dữ liệu lõi an toàn loại sử dụng Smart KeyPaths của Swift 4 " – pkamb