Я нашел следующий фрагмент кода в примере проекта this. Он принимает словарь [String: AnyObject]
, избегает пространственных символов и создает параметризованную строку.Не удалось найти пользователя 'init' в расширении словаря
class func escapedParameters(parameters: [String : AnyObject]) -> String {
var urlVars = [String]()
for (key, value) in parameters {
let stringValue = "\(value)"
let escapedValue = stringValue.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())
urlVars += [key + "=" + "\(escapedValue!)"]
}
return (!urlVars.isEmpty ? "?" : "") + join("&", urlVars)
}
Исходный код - это функция класса. Я хотел бы сделать это методом расширения типа Dictionary.
extension Dictionary {
func escapedParameters() -> String {
var urlVars = [String]()
for (key, value) in self {
let stringValue = "\(value)"
let escapedValue = stringValue.stringByAddingPercentEncodingWithAllowedCharacters(.URLQueryAllowedCharacterSet())
urlVars += [key + "=" + "\(escapedValue!)"]
}
return (!urlVars.isEmpty ? "?" : "") + join("&", urlVars)
}
}
Но я получаю следующее сообщение об ошибке на этой линии urlVars += [key + "=" + "\(escapedValue!)"]
.
Не удалось найти элемент «INIT»
Я не могу понять, почему и как это исправить. Эта проблема не возникает, если это функция класса.
вы не можете + = массивам. – luk2302
@ luk2302 вы не можете использовать + = для добавления одного элемента, но вы можете использовать его для добавления одного массива в другой. Это включает в себя один элементный массив –
@LeoDabus ahhh, я вижу, что он пытается там сделать ... – luk2302