2015-05-06 66 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