如何在 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 Foundation
在 String
和 NSString
any 之间进行隐式转换
【讨论】:
以上是关于如何在 Swift 中指出 for 循环的键是 NSString?的主要内容,如果未能解决你的问题,请参考以下文章
Swift编程语言中如何实现自定义类型的for-in循环(基于Swift 2.2)