2016-03-24 30 views
3

什么是最方便的代码编写如何在Swift中编写array.valueForKey?

[results valueForKey:@"attribute"] 

在迅速? 我发现here,它的推荐使用地图()函数与闭合:

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

注: swiftarray不是NSArray的

+0

出于某种原因,我的电脑已经决定不再想运行任何Swift代码(有用...),但我敢肯定你可以运行这只是从它删除括号?我想可能两种方法都是有效的。你在操场上试过这个吗? TBH,我看不出你得到的错误与你发布的代码有关吗?它绝对是来自它吗? – Fogmeister

+0

你可以发布整个用例吗?你的阵列是什么类型? – Sulthan

+1

@Fogmeister“我的电脑已经决定不再想运行任何Swift代码”哇,我想我想听听更多关于_that_! – matt

回答

5

我'不知道,但如果你有比阵列词典(或支持下标其他类型的)一些其他的对象,你将需要使用下面的代码

results.map({$0.attribute}) 
+0

我实际上得到的错误消息:“AnyObject”没有成员“属性名称” – aneuryzm

+0

然后,您需要将AnyObject转换为包含在结果数组中的真实对象类型 –

+0

这意味着我不能使用简洁的关闭你在你的答案中写道,因为我需要在闭包的签名中指定参数的类型 – aneuryzm

-1

什么是最方便的代码写

[results valueForKey:@"attribute"] 

在swift?

这将是:

results.valueForKey("attribute") 
+1

对于自定义对象数组,我得到错误'Value of type'[TestObject]'has no member'valueForKey'' –

+1

@JamesWebster很明显,您发送的对象'valueForKey'需要是一个派生自NSObject的类,因为这就是'valueForKey'所在的地方。如果你有一个数组,它需要是一个NSArray,它的元素需要是NSObject的衍生物。但这不是OP所要求的(据我所知)...或者是这样吗? – matt

+2

@Matt为什么你认为数组是从NSObject派生的?这是一个快速数组,而不是NSArray。我也收到消息没有成员'valueForKey'。否则,这个问题将是一个非常愚蠢的问题。 – aneuryzm

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)] 
相关问题