web-dev-qa-db-ja.com

Swift

私はSwiftをいじくり回していて、問題に遭遇しました。私は次の辞書を持っています:

var locations:Dictionary<String,CLLocationCoordinate2D> = ["current":CLLocationCoordinate2D(latitude: lat, longitude: lng) ];

println("current locaition is \(locations["current"])")

しかし、コンパイラは、私の辞書のキーを表すcurrentを囲む二重引用符について不平を言っています。

\でエスケープしてみましたが、正しくありませんでした。

どんな助けにも感謝します。

35
Amir Rezvani

Xcode 7.1 +

Xcode 7.1ベータ2以降、文字列リテラル内で引用を使用できるようになりました。リリースノートから:

文字列で補間された式に文字列リテラルが含まれるようになりました。たとえば、「私の名前は(属性["名前"]!)」が有効な式になりました。 (14050788)

Xcode <7.1

そんな風にできるとは思えない。

docs から

内挿された文字列内のかっこ内に記述する式には、エスケープされていない二重引用符( ")またはバックスラッシュ(\)を含めることはできません。また、キャリッジリターンまたはラインフィードを含めることもできません。

使用する必要があります

let someVar = dict["key"]
println("Some words \(someVar)")
42
Logan

補間の代わりに文字列連結を使用できます。

println("Some words " + dict["key"]! + " some more words.")

+標識の周りのスペースに注意してください。

UPDATE:

あなたができる別のことは string format specifiers を使用して、objective-c日で行われたのと同じ方法です:

println( String(format: "Some words %@ some more words", dict["1"]!) )
10
Tom Kraina

Swiftは\()での引用を受け付けません。したがって、1行のコードを2つに分離する必要があります。

ここに中国の読者のための例を示すブログがあります: http://tw.gigacircle.com/321945-1

3
user2967370

文字列の補間に関してもこの問題がありました。私が見つけた最良の解決策は、それを次のように2行に分割することでした:

let location = locations["current"]
println("current locaition is \(location)")

Swiftのバグかもしれません。ドキュメントで見つけたものから、引用符をエスケープするために\を使用できるはずです。

3
Connor

Swift 2.1なので、補間には二重引用符を使用できます。println("current location is \(locations["current"])")