Подтвердить что ты не робот

Escape словарный ключ двойного кавычки при выполнении пункта println словаря в Swift

Я играл с Swift и просто столкнулся с проблемой. У меня есть следующий словарь в:

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

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

но компилятор жалуется на двойные кавычки вокруг current, которые представляют собой ключ в моем словаре.

Я попытался убежать от него с помощью \, но это был неправильный путь.

Оцените любую помощь.

4b9b3361

Ответ 1

Xcode 7.1 +

Так как Xcode 7.1 beta 2, теперь мы можем использовать цитаты в строковых литералах. Из примечаний к выпуску:

Выражения, интерполированные в строках, теперь могут содержать строковые литералы. Например, "Мое имя (атрибуты [" name "]!)" Теперь является действительным выражением. (14050788)

Xcode < 7.1

Я не думаю, что вы можете сделать это таким образом.

Из docs

Выражения, которые вы пишете в круглых скобках внутри интерполированной строки, не могут содержать неэкранированную двойную кавычку (") или обратную косую черту (\) и не могут содержать возврат каретки или строку.

Вам нужно будет использовать

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

Ответ 2

Вы можете использовать конкатенацию строк вместо интерполяции:

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

Просто используйте пробелы вокруг знаков +.

UPDATE:

Другое, что вы можете сделать, это использовать спецификаторы формата строки так же, как это было сделано в objective-c дни:

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

Ответ 3

У меня тоже была проблема с интерполяцией строк. Лучшее решение, которое я нашел, это просто разбить его на две строки:

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

Это может быть ошибка с Swift. Из того, что я нашел в документах, вы можете использовать\для возврата кавычек.

Ответ 4

Swift не принимает предложение в \(). Поэтому вам нужно разделить однострочный код на два.

Вот блог, показывающий пример для китайских читателей: http://tw.gigacircle.com/321945-1

Ответ 5

С Swift 2.1 вы можете использовать двойные кавычки при интерполяции. println("current location is \(locations["current"])")