2016-11-15 9 views
1

У меня есть быстрые опциональный развернутый переменная phone, но когда я пытаюсь использовать эту переменную она дает опциональный завернутые, как показано нижеSwift разворачивать не факультативный тип

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

Ваш «адрес? .мобиль» уже содержит строку с дополнительным префиксом. Проверьте сеттер для этого свойства. –

+6

Похоже, вам удалось присвоить 'mobile' * актуальную * строку« Необязательный (+123232323) », возможно, используя интерполяцию строк или« String (описывая:) »на необязательном - пожалуйста, покажите нам, переопределяя это свойство. – Hamish

ответ

1

Вы правы, телефон не должен быть опциональным при печати. Как отмечал Хэмиш выше, кажется, что что-то пошло не так, когда присваивается значение 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 переменной, когда вы кладете на нее курсор в редакторе)