2016-09-23 79 views
0

一個類的實例在迅速的教訓我會通過它說,這是一個創建類的實例的有效途徑:創建具有參數

class Heroes 
{ 
    var (name, gender, kingdom) = ("","","") 
    var (level, ad, hp) = (0,0,0) 

    init(name: String) 
    { 
     self.name = name 
    } 
} 

以下的部分是什麼原因造成這錯誤"cannot assign value of type '(name: String)' to type 'Heroes'

let sirGeorge: Heroes 
sirGeorge = (name: "Sir George") 

以下方式工作正常,但我不明白的上述方式的語法,也不編譯器。 Swift 3中有沒有一種新的寫法呢?

var sirLance = Heroes(name: "Sir Lancelot") 

回答

1

因爲如果你要創建的對象的英雄,首先你需要使用類名英雄然後在括號與它的參數(名稱:「喬治先生」),像這樣:

let sirGeorge: Heroes 
sirGeorge = Heroes(name: "Sir George") 
0
let sirGeorge: Heroes 

您創建let和名稱sirGeorge常數,你設置類型的常量是Heroes。它是值參考數據類型。

sirGeorge = (name: "Sir George") 

下聯你試圖給定類型Heroes新價值的內容類型'(name: String)'和聽到您收到的問題。因爲你的類型是Heroes而不是'(name: String)'。另一方面,您嘗試分配給類的值構造函數。

0

,當你做到這一點 sirGeorge =(名稱:「喬治先生」) 就像是你要分配(名稱:「喬治先生」),以sirGeorge這是錯誤的,因爲sirGeorge是類英雄

的對象,以便這是r飛行方式

sirGeorge =英雄(名稱: 「喬治先生」)

,因爲現在你初始化你的對象。它就像調用的init(可以說初始化函數)和初始化需要一個字符串「喬治先生」

0

線路1:let sirGeorge: Heroes

在這裏,你正在創建Heroes類型的常量sirGeorge。這是對的。唯一值sirGeorge可以採取必須是Heroes類型,沒有別的。

線路2:sirGeorge = (name: "Sir George")

在這裏,你正在分配sirGeorge的值類型爲(name: "Sir George"),而不是Heroes的。因此,爲了將值分配給sirGeorge你需要創建一個實例Heroes,即,

sirGeorge = Heroes(name: "Sir George") 

這將調用init(name: String)的Heroes