我在Swift中使用Xcode 6。
当我以编程方式创建字典时,我可以按键或值打印或创建数组。当我从plist创建并加载字典时,我可以完全打印plist,但不能创建数组或打印键或值。错误消息是' NSDictionary?'没有名为'值'的成员。
我注意到程序字典打印在括号内,键和值之间有一个冒号,但是plist加载的字典打印在大括号内,键和值之间带有=符号。我认为这可能是问题,但不知道为什么它以这种方式格式化或如何解决它。
// Programmatic Dictionary Code
var newDict:[String:String] = ["car":"ground", "airplane":"sky", "boat":"water"]
println("newDict key:value are: \(newDict)")
//Prints Out as expected
newDict key:value are: [car: ground, boat: water, airplane: sky]
// plist read to Dictionary Code
var type : NSDictionary?
if let path = NSBundle.mainBundle().pathForResource("transport", ofType: "plist") {
type = NSDictionary(contentsOfFile:path)
}
println(type)
// print out isn't the same as above
Optional({
airplane = sky;
boat = water;
car = ground;
})
尝试访问此加载字典中的键或元素会返回一条错误消息,指出字典没有成员....
我一直无法找到任何解释为什么加载的字典会有所不同或如何访问成员。
答案 0 :(得分:0)
您需要解开您的选项。可选是一个变量,它可以像任何其他变量一样保存一个值,但它也可以完全没有值,或nil
。
此代码:
var type : NSDictionary?
if let path = NSBundle.mainBundle().pathForResource("transport", ofType: "plist") {
type = NSDictionary(contentsOfFile:path)
}
println(type)
应该是:
var type : NSDictionary?
if let path = NSBundle.mainBundle().pathForResource("transport", ofType: "plist") {
type = NSDictionary(contentsOfFile:path)
}
println(type!)
只要您使用type
(或任何其他可选项),就需要使用!
,?
或if let
打开它。
请注意,如果type
包含nil
并且您使用!
打开它,那么您的应用会崩溃,并且在解开可选值&#34时,意外地发现了#n; < / p>
有关选项的更多信息,请参阅The Swift Programming Language: The Basics。