我正在尝试使用plist
来保存一系列字典。除了当我尝试迭代数组的每个元素时,一切似乎都没问题。在这种情况下,我使用NSArray
和NSDictionary
s。
在下面的示例中,albumInfo
是NSDictionary
。密钥"Title"
与字符串对象链接。我正在使用一个名为addAlbumInfo
的方法,除了String
"price:"
个
请帮忙。
var pathToAlbumsPlist:NSString = NSBundle.mainBundle().pathForResource("AlbumArray", ofType: "plist");
var defaultAlbumPlist:NSArray = NSArray(contentsOfFile: pathToAlbumsPlist);
for albumInfo:NSDictionary in defaultAlbumPlist {
self.addAlbumWithTitle(
albumInfo["title"], //Says it is not convertable to a string
artist: albumInfo["artist"],
summary: albumInfo["summary"],
price: albumInfo["price"].floatValue,
locationInStore: albumInfo["locationInStore"]
);
}
答案 0 :(得分:1)
由于albumInfo是一个NSDictionary,它只能包含AnyObjects,这意味着它不能包含作为结构的Swift String。如果你的addAlbumWithTitle需要一个String,并且你试图将它传递给AnyObject,它会给你这个错误。您可以将albumInfo["title"]
强制转换为Swift String,如下所示:
albumInfo["title"] as String
答案 1 :(得分:1)
我找到的解决方案是使albumInfo假定一个类型,然后键入每个值
的大小写var pathToAlbumsPlist:NSString = NSBundle.mainBundle().pathForResource("AlbumArray", ofType: "plist");
var defaultAlbumPlist:NSArray = NSArray(contentsOfFile: pathToAlbumsPlist);
for albumInfo in defaultAlbumPlist {
self.addAlbumWithTitle(albumInfo["title"] as String,
artist:albumInfo["artist"] as String,
summary:albumInfo["summary"] as String,
price:albumInfo["price"] as Float,
locationInStore:albumInfo["locationInStore"] as String
);
}