2015-12-19 83 views
-1

我快速學習。我有一個關於初始化程序的問題init()
例如,我想初始化Int。Swift語法錯誤和init()?

var number: Int = 20 
var number = Int(20) 
var number = Int.init(20) 

所有的表達是一樣的嗎?
二,爲什麼會出現這種表達方式?

var check = "123" 
var phoneNum:Int? 
if((phoneNum = Int.init(check)) != nil) 
{ 
    print("Success"); 
} 

沒有錯誤!

var check = "123" 
var phoneNum:Int? = Int.init(check) 

if(phoneNum != nil) 
{ 
    print("Success"); 
} 
+0

你爲什麼期望出現錯誤? – Arc676

+0

Swift不是C.在Swift中,賦值不會產生任何值。 – gnasher729

+0

我認爲斯威夫特像C,我努力學習斯威夫特!感謝您的評論。 –

回答

3
  1. 是的,這些都具有相同的效果:

    var number: Int = 20 
    var number = Int(20) 
    var number = Int.init(20) 
    

    這是做另一種方式:

    var number = 20 
    
  2. 這將產生一個錯誤:

    var check = "123" 
    var phoneNum:Int? 
    if((phoneNum = Int.init(check)) != nil) 
    { 
        print("Success"); 
    } 
    

    因爲Swift中的賦值返回(),這是類型Void的唯一值,但是nil的類型是可選的,所以出現錯誤(「錯誤:類型'()'的值永遠不會爲零,不允許比較」這與Void不同。 Swift中的賦值通常不能用作表達式。

+0

謝謝你的幫助! –

2

我想添加此評論作爲rob的回答,但由於我沒有足夠的聲譽,這是我的答案?評論(雙關意圖;)。

至於最後兩個例子,你也可以使用optional binding在分配中的幫助:

var check = "123" 

var phoneNumber: Int? 

if let number = Int.init(check) { 
    phoneNumber = number 
    print("Success") 
} 

print(phoneNumber) 

// Success 
// Optional(123) 

改變check值:

var check = "A23" 

var phoneNumber: Int? 

if let number = Int.init(check) { 
    phoneNumber = number 
    print("Success") 
} 

print(phoneNumber) 

// nil 

我希望這可以幫助了。

+0

謝謝!因爲你,我明白可選的綁定!最好的問候 –