どのようにSwift 3のオブジェクトを文字列に変換できますか?これは、古いバージョンでは非常に簡単です。
_var str = toString(AnyObject)
_
String(AnyObject)
を試しましたが、AnyObjectがオプションの値ではないと確信していても、出力は常にオプションです。
コンパイラは、コードを次のものに置き換えることを提案します。
let s = String(describing: str)
もともと文字列ではないかもしれないものを文字列として保存するのではなく、空の文字列で静かに失敗したい状況がある場合は、もう1つのオプションが利用できます。
let s = str as? String ?? ""
それ以外の場合は、上/下の回答でエラーを特定してスローする方法があります。
以下の3つのオプションがあります。
オプション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
試して
let a = "Test" as AnyObject
guard let b = a as? String else { // Something went wrong handle it here }
print(b) // Test
これを試して -
var str:AnyObject?
str = "Hello, playground" as AnyObject?
if let value = str
{
var a = value as! String
}
OR
var a = str as? String
以下に、nil
が空の文字列になる、任意の値を文字列にマッシュする単純な関数( repl.it )を示します。 IDにnull
、空白、数字、数字の文字列を一貫して使用しない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!"
- ""