2015-06-28 4 views
0

Я нашел следующий фрагмент кода в примере проекта 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»

Я не могу понять, почему и как это исправить. Эта проблема не возникает, если это функция класса.

+0

вы не можете + = массивам. – luk2302

+0

@ luk2302 вы не можете использовать + = для добавления одного элемента, но вы можете использовать его для добавления одного массива в другой. Это включает в себя один элементный массив –

+0

@LeoDabus ahhh, я вижу, что он пытается там сделать ... – luk2302

ответ

1

Попробуйте так:

urlVars.append("\(key)=\(escapedValue!)")