22

我们如何在 swift 3 中将任何对象转换为字符串,在旧版本中使用非常容易。

var str = toString(AnyObject)

我试过String(AnyObject)了,但输出总是可选的,即使我确定 AnyObject 不是可选值。

4

5 回答 5

41

编译器建议您将代码替换为:

let s = String(describing: str)

如果您希望以空字符串静默失败,而不是将原本可能不是字符串的内容存储为字符串,则可以使用另一种选择。

let s =  str as? String ?? ""

否则,您可以在上面/下面的答案中识别和抛出错误。

于 2016-10-14T16:20:07.897 回答
15

这里有三个选项供您选择:

选项 1 - 如果让

if let b = a as? String {
    print(b) // Was a string
} else {
    print("Error") // Was not a string
}

选项 2 - 保护让

guard let b = a as? String
else {
    print("Error") // Was not a string
    return // needs a return or break here
}
print(b) // Was a string

选项 3 - 让 ?? (空合并运算符)

let b = a as? String ?? ""
print(b) // Print a blank string if a was not a string
于 2016-10-14T13:47:21.137 回答
7

这是一个简单的函数 ( repl.it ),它将任何值混合成一个字符串,并nil变成一个空字符串。我发现它对于处理不一致地使用null、空白、数字和数字字符串作为 ID 的 JSON 很有用。

import Foundation

func toString(_ value: Any?) -> String {
  return String(describing: value ?? "")
}

let d: NSDictionary = [
    "i" : 42,
    "s" : "Hello, World!"
]

dump(toString(d["i"]))
dump(toString(d["s"]))
dump(toString(d["x"]))

印刷:

- "42"
- "Hello, World!"
- ""
于 2019-09-07T00:51:42.390 回答
2

尝试

let a = "Test" as AnyObject
guard let b = a as? String else { // Something went wrong handle it here }
print(b) // Test
于 2016-10-14T13:37:28.077 回答
0

尝试这个 -

var str:AnyObject?
str = "Hello, playground" as AnyObject?
if let value = str
{
   var a = value as! String
}

或者

var a = str as? String
于 2016-10-14T13:35:31.477 回答