如何在Swift中编写array.valueForKey?

时间:2016-03-24 16:09:19

标签: objective-c swift

什么是最方便的代码编写

[results valueForKey:@"attribute"]
在快速? 我发现here建议使用带有闭包的map()函数:

swiftarray.map({$0["attribute"]})

N.B。 swiftarray不是NSArray

3 个答案:

答案 0 :(得分:7)

我不确定但是如果你在数组中有一些对象而不是Dictionary(或其他支持下标的类型),你将需要使用以下代码

results.map({$0.attribute})

答案 1 :(得分:0)

  

什么是最方便的代码编写

[results valueForKey:@"attribute"]
     

在swift?

那将是:

  results.valueForKey("attribute")

答案 2 :(得分:0)

你的班级有下标吗?

我已经能够创建一个可以使用KVC访问器的测试类,如下所示:

class TestObject
{
    var name:String
    var numbers:[String:Int] = [String:Int]()

    init(name:String)
    {
        self.name = name
    }

    subscript(index: String) -> Int? {
        get {
            return numbers[index]
        }
        set(newValue) {
            numbers[index] = newValue
        }
    }
}

使用以下代码进行测试:

let testObject1 = TestObject(name: "test1")
testObject1["home-phone"] = 1234
testObject1["mobile-phone"] = 5678

let testObject2 = TestObject(name: "test2")
testObject2["office"] = 0987
testObject2["mobile-phone"] = 6543

let array : [TestObject] = [testObject1, testObject2]

var results = array.map({$0["office"]})
print("Results:\(results)")

results = array.map({$0["mobile-phone"]})
print("Results:\(results)")

产生以下结果:

Results:[nil, Optional(987)]
Results:[Optional(5678), Optional(6543)]