2016-11-15 58 views
1

我迅速可選展開變量phone但是當我嘗試使用這個變量它給可選裹得像下面斯威夫特展開非可選類型

if let phone = self!.memberItem!.address?.mobile { 
    print(phone) // Optional(+123232323) 
    //error "Cannot force unwrap non optional type 'String'". 
    print(phone!) 
} 

struct Address{ 

    var tel: String? 
    var fax: String? 
    var mobile: String? 
    var email: String? 

} 

phone包含可選值,但是當我試圖強行解開這個可選它會拋出錯誤「不能強制展開非可選類型'String'」。

+1

可能[什麼是Swift中的可選值?](http://stackoverflow.com/questions/24003642/what-is-an-optional-value-in-swift) – Idan

+4

您的地址?.mobile已包含字符串帶有可選的前綴。檢查這個屬性的setter。 –

+6

聽起來就像你已經設法分配'移動'*實際*字符串「可選(+123232323)」,可能通過使用字符串插值或'字符串(描述:)'在一個可選的 - 請告訴我們你是如何'重新分配這個屬性。 – Hamish

回答

1

你是對的,打印時手機不應該是可選類型。正如Hamish在上面評論的那樣,在將值分配給mobile屬性時聽起來像是出錯了。

這裏有一個簡單的例子:

struct Person { 
    let address: Address? 
} 

struct Address { 
    let mobile: String? 
} 

let dude: Person? = Person(address: Address(mobile: "555-1234")) 

if let phone = dude?.address?.mobile { 
    print(phone) // Prints plain "555-1234", without "Optional" 
} 

(如果你使用的XCode,檢查它告訴你關於phone變量的類型,當你把你的光標在編輯器)