从Int转换为String Swift 2.2

时间:2016-04-12 01:21:11

标签: swift

逗人

我遇到这种情况,其中chatId是Int

类型的属性
let StringMessage = String(self.listingChat?.messages.last?.chatId)

当我调试时,我发现 StringMessage 正在返回可选(15)这意味着它已被解包。但与此同时,XCode不允许我放任何刘海(!)来打开它。所以我坚持使用Unwrapped Variable。我知道它的noob问题,但我真的无法得到它。感谢您的帮助。

谢谢

3 个答案:

答案 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)!