2014-07-17 104 views
1

我有這麼定義的類:斯威夫特可選屬性錯誤

class User { 

    var name : String? 
} 

我使用的代碼使用它在我的ViewController:

import UIKit 

class ViewController: UIViewController { 

    let user : User = User() 
} 

我有編譯錯誤

用戶()不可構造()

我知道Swift中的屬性必須有一個默認值,但是可選項有一個(nil)。如果我將屬性「name」初始化爲nil或添加init()初始化程序,錯誤消失。但我不明白爲什麼我的選項默認情況下不爲零。

順便說一句,在操場下面的代碼編譯完美:

class ViewController: UIViewController { 

    let user : User = User() 
} 

class User { 

    var name : String? 
} 
let vc = ViewController() 

而且很奇怪。

此問題與this有關,但我不明白那裏的答案(爲什麼可選在操場上有默認值,但在應用程序中沒有?)。

編輯:只有在User類定義在一個單獨的文件中時,纔會發生錯誤。 Xcode是Beta 3中(見圖片)

XCode Versione

User class file

view controller file

+0

是錯誤的工作不會出現在我的身邊。我沒有進一步的問題編譯這個項目。 – holex

+0

您是否嘗試過將該項目作爲我編輯中的屏幕截圖? – valfer

+0

錯誤也出現在當前的XCode 6.0 GM(6A313),Swift版本1.0中:-( – valfer

回答

0

您應該提交錯誤報告 - 這絕對是由編譯器不正確的行爲。當您嘗試初始化您使用的默認初始這樣 - Apple's documentation狀態:

斯威夫特提供任何結構或基類 ,對於其所有屬性提供默認值,並做了默認初始值不是 本身提供至少一個初始化程序。默認初始化程序 只是創建一個新的實例,並將其所有屬性設置爲默認值 。

那麼說明這個例子:

class ShoppingListItem { 
    var name: String? 
    var quantity = 1 
    var purchased = false 
} 
var item = ShoppingListItem() 

然後在下面的段落說:

...(該name屬性是一個可選的String屬性,所以它 自動接收默認值爲nil,即使此代碼中未寫入 值。)...

+0

謝謝,我的意見還在於它是目前測試版的 – valfer

+0

Github項目的複製問題的bug:https:// github。 com/valfer/OptionalBug – valfer

0

我在iOS應用程序中使用Xcode 6 beta 3試過了你的代碼,它只是編譯並運行正常。

的代碼相同

class User { 
    var name : String? 
} 

class ViewController: UIViewController { 
    let user : User = User() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 
} 

,如果我設置在這條線斷點:

let user : User = User() 

它停止如預期。

您使用的是測試版3嗎?你有沒有仔細檢查你的代碼,以確定它實際上是你在這裏發佈的內容?

+0

是的,我正在使用Beta 3.我認爲你的代碼按預期工作,因爲這兩個類都在同一個源文件中,請參閱我的編輯 – valfer

+0

我嘗試了github中的代碼, t編譯唯一的方法是顯式地添加一個空的初始化函數*或*初始化變量爲'nil'。在我看來,這肯定是一個錯誤 – Antonio

0

如果你想它來編譯你寫你的用戶類這樣的,可能不是很理想,但似乎github.com/valfer/OptionalBug

class User { 

    var name : String? 

    init() { 

    } 
} 
+0

或:class User {var name:String?= nil } – valfer