如何在 Swift 中指出 for 循环的键是 NSString?

Posted

技术标签:

【中文标题】如何在 Swift 中指出 for 循环的键是 NSString?【英文标题】:How can I indicate in a Swift that key of for loop is NSString? 【发布时间】:2014-07-26 06:35:55 【问题描述】:

这里我有一个 for 循环。我知道我将 NSStrings 存储在其中。如何指明attributeName 的类型?我不想在循环内到处写(relationshipName as NSString)

for attributeName in managedObject.entity.attributesByName.keys 

更新

如果我添加 [String] 和 for 循环声明,我会收到以下错误:

更新

因为String也有问题

【问题讨论】:

【参考方案1】:

您必须将attributesByName 返回的字典转换为真正的键/值类型:

let attributes = managedObject.entity.attributesByName as [String: NSAttributeDescription]
for attributeName in attributes.keys  
    // attributeName has the type String
    // ...

let attributes = managedObject.entity.attributesByName as [NSString: NSAttributeDescription]
for attributeName in attributes.keys  
    // attributeName has the type NSString
    // ...

【讨论】:

【参考方案2】:

您可以将 ObjC API 返回的 NSArray(默认为 [AnyObject]!)转换为类型化数组:

for attributeName in managedObject.entity.attributesByName.keys as [String] 
    // ...

【讨论】:

【参考方案3】:
for attributeName: String in managedObject.entity.attributesByName.keys 

【讨论】:

【参考方案4】:

你可以显式地给attributeName 一个像attributeName:NSString 这样的类型

for  attributeName:NSString   in managedObject.entity.attributesByName.keys 

    attributeName.length  //here attributeName will work as NSString

并注意 import FoundationStringNSString any 之间进行隐式转换

【讨论】:

以上是关于如何在 Swift 中指出 for 循环的键是 NSString?的主要内容,如果未能解决你的问题,请参考以下文章

带有增量的 Swift 3 for 循环

Swift编程语言中如何实现自定义类型的for-in循环(基于Swift 2.2)

如何在 Swift 中指定要避免的范围

Swift中的Loop for Loop总和

如何在 Swift 3 中为我在 for 循环期间修改的数组编写 for 循环?

如何在后台线程swift中运行for循环