2015-05-06 38 views
0

在Swift中,我试图初始化一个新分配的NSArray,其中包含URL指定位置的内容。意外的尾部封闭

我想以下Objective-C代码的夫特当量:

NSURL *url = [[NSBundle mainBundle] URLForResource:@"MyResourceFile" withExtension:@"plist"]; 
NSArray *myArray = [[NSArray alloc] initWithContentsOfURL:url]; 

我在NSArrayClass Reference看到,有用于夫特一个init方便初始化。

我有什么至今在斯威夫特:“意外的尾随关闭”:

var url: NSURL = NSBundle.mainBundle().URLForResource("MyResourceFile", withExtension: "plist")! 

var myArray: NSArray = NSArray.alloc() 
myArray.init(url) // <-- Error: "Unexpected trailing closure" 

我就上线得到一个错误。为什么Swift认为这里有关闭?什么是写这条线的正确方法?

回答

1

在Swift中从不说alloc。只需使用初始化:

var myArray = NSArray(contentsOfURL:url) 

注(如你继续你的代码)的结果是可选的,因为初始化可能会失败(网址内容可能不是一个有效的数组)。该SWIFTY成语对付那就是:

if let myArray = NSArray(contentsOfURL: url) { 
    // do stuff with myArray, which is now an actual array 
} 
+1

而且,对于Objective-C的初始化是如何转化为斯威夫特,看看我的书:http://www.apeth.com/swiftBook/apa.html#_objective_c_initializers_and_factories – matt