2017-08-07 50 views
0
class person { 
    var name : String 

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

我學習斯威夫特類章self.name =在Swift中的名稱。我不明白爲什麼這個代碼需要

爲什麼需要init(name:String) self.name = name代碼 這段代碼的目的是什麼,我不明白。

我宣稱var name: String 並再次init(name: String),爲什麼需要self.name = name

只是var nameself.name = name有什麼不同?

+0

'變種名稱:String'聲明你的財產。初始化程序'init'在您創建類的實例時被調用。傳入'person(名稱:「jihoon」)''的字符串將被分配給該屬性。在聲明'self.name = name'中,'self.name'指向屬性,'name'是我的例子中傳入的字符串 - 「jihoon」。 – vacawama

回答

0

Classesstructures必須在創建該類或結構的實例時將其存儲的所有屬性設置爲適當的初始值。存儲的屬性不能處於不確定狀態。

class person { 
    var name : String // undetrmined state 
    init(name: String) { 
     self.name = name 
    } 
} 
class person2 { 
    var name : String = "default value" // detrmined state 
    // Now these intializer are not optional. You can use these initializer or not. 
    init(name: String) { 
     self.name = name 
    } 
    init() { 
    } 
} 
// Aother example for optional stored property 
class person3 { 
    var name : String? // detrmined state, because default value for optional is nil 
    // Now these intializer are not optional. You can use these initializer or not. 
    init(name: String) { 
     self.name = name 
    } 
    init() { 
    } 
} 

欲瞭解更多信息閱讀這一個Apple Doc

+0

嗨jihoon,你檢查我的答案嗎? – iMuzahid

+0

謝謝你的幫助!是的,我已經檢查:) – jihoon

+0

感謝您的關注。 upvote請:) – iMuzahid

3

調查一下所謂的變量範圍。在您的代碼中 - 您的init中有兩個「名稱變量 - 類(或實例)變量和」參數。

後者 - init(name:)僅是內您的初始化函數使用,這意味着實例具有沒有名沒有self.name = name一旦你創建的實例。

只要您的實例類person是前者可用 - 對於實例。

爲了進一步解釋,試試這個。改變你的代碼:

class Person { 
    var myName : String 
    var myOtherName : String 

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

在您的應用程序或視圖控制器,這樣做:

let myPerson = Person(name: "john") 
print(myPerson.myName)  // prints "jihoon" 
print(myPerson.myOtherName) // prints nothing 
print(myPerson.name)   // generates a build error because name doesn't exist 

最後一個音符 - 斯威夫特類名都是大寫的,所以最好的名字是Person,不person

+0

謝謝你的幫助! – jihoon

相關問題