Swift:迭代plist

时间:2014-07-13 21:59:52

标签: ios nsarray swift nsdictionary plist

我正在尝试使用plist来保存一系列字典。除了当我尝试迭代数组的每个元素时,一切似乎都没问题。在这种情况下,我使用NSArrayNSDictionary s。

在下面的示例中,albumInfoNSDictionary。密钥"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"]
     );
  }

2 个答案:

答案 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
    );
}