web-dev-qa-db-ja.com

swift 3-ios:anyObjectを文字列に変換

どのようにSwift 3のオブジェクトを文字列に変換できますか?これは、古いバージョンでは非常に簡単です。

_var str = toString(AnyObject)
_

String(AnyObject)を試しましたが、AnyObjectがオプションの値ではないと確信していても、出力は常にオプションです。

13
Anthony Shahine

コンパイラは、コードを次のものに置き換えることを提案します。

let s = String(describing: str)

もともと文字列ではないかもしれないものを文字列として保存するのではなく、空の文字列で静かに失敗したい状況がある場合は、もう1つのオプションが利用できます。

let s =  str as? String ?? ""

それ以外の場合は、上/下の回答でエラーを特定してスローする方法があります。

30
sketchyTech

以下の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
10
Ben

試して

let a = "Test" as AnyObject
guard let b = a as? String else { // Something went wrong handle it here }
print(b) // Test
2
Rashwan L

これを試して -

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

OR

var a = str as? String
1
Anupam Mishra

以下に、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!"
- ""
0
Trevor Robinson