Escape словарный ключ двойного кавычки при выполнении пункта println словаря в Swift
Я играл с Swift и просто столкнулся с проблемой.
У меня есть следующий словарь в:
var locations:Dictionary<String,CLLocationCoordinate2D> = ["current":CLLocationCoordinate2D(latitude: lat, longitude: lng) ];
println("current locaition is \(locations["current"])")
но компилятор жалуется на двойные кавычки вокруг current
, которые представляют собой ключ в моем словаре.
Я попытался убежать от него с помощью \
, но это был неправильный путь.
Оцените любую помощь.
Ответы
Ответ 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"])")