逗人
我遇到这种情况,其中chatId是Int
类型的属性let StringMessage = String(self.listingChat?.messages.last?.chatId)
当我调试时,我发现 StringMessage 正在返回可选(15)这意味着它已被解包。但与此同时,XCode不允许我放任何刘海(!)来打开它。所以我坚持使用Unwrapped Variable。我知道它的noob问题,但我真的无法得到它。感谢您的帮助。
谢谢
答案 0 :(得分:1)
这取决于你想要的默认值。
假设您希望默认值为空字符串(“”),您可以创建一个函数或方法来处理它。
func stringFromChatId(chatId: Int?) -> String {
if let chatId = chatId {
return String(chatId)
} else {
return ""
}
}
let stringMessage = stringFromChatId(self.listingChat?.messages.last?.chatId)
或者你可以用一个闭合来处理它。
let stringMessage = { $0 != nil ? String($0!) : "" }(self.listingChat?.messages.last?.chatId)
如果你不介意self.listingChat?.messages.last?.chatId
nil
时崩溃,那么你应该可以直接打开它。
let StringMessage = String((self.listingChat?.messages.last?.chatId)!)
或关闭
let stringMessage = { String($0!) }(self.listingChat?.messages.last?.chatId)
<强>更新强>
假设chatId是Int
而不是Optional<Int>
(AKA Int?
),我错过了最明显的解包回答。对不起,昨晚我累了。
let StringMessage = String(self.listingChat!.messages.last!.chatId)
强行打开沿途的所有选项。
答案 1 :(得分:1)
Optionals有一个名为map
的非常好的方法(对于Arrays与map
无关),如果变量是nil
则返回nil
,否则它会调用一个函数(非零)价值。结合guard-let,您可以获得非常简洁的代码。 (我已经改变了stringMessage
的情况,因为变量应该以小写字母开头。)
guard let stringMessage = self.listingChat?.messages.last?.chatId.map { String($0) } else {
// Do failure
}
// Success. stringMessage is of type String, not String?
答案 2 :(得分:0)
我想:
let StringMessage = String(self.listingChat?.messages.last?.chatId)!