我正在读一个plist键(带有n个NSDictionaries的NSArray):
let regionsToMonitor = NSBundle.mainBundle().infoDictionary["Regions"] as Array<Dictionary<String,AnyObject>>
现在我迭代它:
for regionToMonitor in regionsToMonitor {
现在我想获得regionToMonitor的uuidString
ObjC中的:NSString *uuidString = regionToMonitor[@"uuidString"];
在swift中我尝试:let uuidString = regionToMonitor["uuid"]!.stringValue;
以上编译但是字符串在swift中总是nil
。 {!1}}在没有!.stringValue的情况下使用regionToMonitor["uuid"]
如何在这里获得有效的Swift.String?
我正在尝试将其传递给NSUUID!
我也试过
println
=&GT; AnyObject不能转换为String
let uuidString:String = regionToMonitor["uuid"]
=&GT;无法找到&#39;下标&#39;接受提供的参数
let uuidString = regionToMonitor["uuid"] as String
=&GT; &#39; AnyObject&#39?;不能隐含地向下转换为&#39; String&#39 ;;你的意思是使用&#39;作为&#39;迫使低垂?
答案 0 :(得分:44)
我最终得到了丑陋的一句话:
var uuidString:String = regionToMonitor["uuid"] as! String
没有警告,没有错误,没有运行时错误
答案 1 :(得分:11)
我发现这对我有用
var uuidString: String? = regionToMonitor["uuid"] as AnyObject? as? String
编辑:这是旧版快速版的答案
请使用接受的答案。
答案 2 :(得分:3)
AnyObject?
是可选的,因为字典可能包含也可能不包含&#34; uuid&#34;键。要获得可选的值,您必须解开它。请参阅文档中的Optionals。
处理可选项的最安全方法是将其置于条件语句中。
if let uuidString = regionToMonitor["uuid"] {
// do something with uuidString
}
如果您绝对肯定字典将始终包含此键/值对,则可以使用隐式解包的可选项(!
后缀):
println("UUID: \(regionToMonitor["uuid"]!)")
在这种情况下,如果该键没有值,您的应用就会崩溃。
如果你经常使用!
,看起来你总是大喊大叫...这可能有助于说明为什么你应该谨慎使用它,如果有的话。 :)
答案 3 :(得分:2)
我找到了一个可行的解决方案,它可以在没有警告的情况下进行编译等等:
var regions = NSBundle.mainBundle().infoDictionary["Regions"] as Array<Dictionary<String, AnyObject>>
for region in regions {
let dict: NSDictionary = region
var uuid = dict["uuidString"] as String
}
infoDictionary
中的NSBundle
会返回NSArray
和NSDictionary
,而非Swift.Array
或Swift.Dictionary
。虽然,它们应该是可以互换的,但也许它们并不像我们那样。
答案 4 :(得分:1)
我不确定我的解决方案是否有效,但现在不是。
var uuidVar = regionToMonitor["uuid"]
var uuidString:String = "\(uuidVar)"
希望它有所帮助。
答案 5 :(得分:0)
您也可以使用
var uuidString = regionToMonitor["uuid"]? as String
它与你正在做的结果相同,但恕我直言的意图更明确。 as
操作员力量无论如何都会展开,因此将感叹号放在后面会感觉多余。将问号置于字典下标后面,可以清楚地表明您正在链接一个可选项。
答案 6 :(得分:0)
如果您确定要使用未包装的值,可以使用以下任何一种:
var uuidString:String! = regionToMonitor["uuid"]
var uuidString = regionToMonitor["uuid"] as String!
甚至是这样:
if var uuidString = regionToMonitor["uuid"] {
println("\(uuidString) has been unwrapped")
}
答案 7 :(得分:-1)
保持简单:
let uuidString = "\(regionToMonitor["uuid"])"