2014-10-14 24 views
6

Có thể mã khóa-giá trị (KVC) với cấu trúc dữ liệu Swift gốc như Array và Dictionary không? Key-Value mã hóa vẫn có sẵn cho các cấu trúc NSFoundation trong Swift, giống như trong Objective C.Mã hóa giá trị khóa (KVC) với mảng/từ điển trong Swift

Ví dụ, đây là hợp lệ:

var nsarray: NSArray = NSArray() 
// Fill the array with objects 
var array: NSArray = nsarray.valueForKeyPath("key.path") 

Nhưng điều này là không hợp lệ:

var swiftarray: Array = [] 
// Fill the array with objects 
var array = swiftarray.valueForKeyPath("key.path") // Invalid, produces a compile-time error 
+0

Ý anh là 'swiftarray' tại dòng cuối cùng của mã? –

+0

Có, cảm ơn bạn. Chỉ cần thay đổi nó. – kev

+0

Hãy xem bài đăng này của Matt Long: http://www.cimgf.com/2014/11/05/swift-and-valueforkeypath-you-cant-keep-a-good-api-down/ –

Trả lời

11

Nó có vẻ như KVC trên các đối tượng Swift gốc không được hỗ trợ. Đây là cách giải quyết thanh lịch nhất mà tôi đã tìm thấy:

var swiftarray: Array = [] 
// Fill the array with objects 
var array: NSArray = (swiftarray as NSArray).valueForKeyPath("key.path") as NSArray 
8

Tôi đã thấy điều này:

var array = swiftarray.map({$0["key.path"]! as ObjectType}) 
2

bạn có thể làm như sau:

let items : Array<String> = (myArray as AnyObject).valueForKeyPath("name") as! Array<String> 
Các vấn đề liên quan