网址字符问题

时间:2017-05-03 10:34:07

标签: swift url swift3 character

我遇到了网址的问题,这是我的代码;

我的功能;

func getMahalle (addres: String){

    let urlString = adres
    let url = URL(string: urlString)// I'm getting error right after this line when have urlString ı,İ,ş,Ş,ü,Ü,ç,Ç,ğ,Ğ,ö,Ç , url = nil after this line

    let task = URLSession.shared.dataTask(with: url!) { (data,urlresponse, error) in
        if error != nil {

            print(error!)

        }

        else {

            do {

                let json = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSDictionary

                if let table = json["Table"] {

                    for var i in 0..<(table as AnyObject).count {

                        let tableDict = (table as! Array<AnyObject>) [i] as! [String: Any]

                        let iller = tableDict["site_mahalle"]
                        self.mahallelerDizi.append(iller as! String)

                                                    DispatchQueue.main.async {
                            self.pickerView.reloadAllComponents()
                        }

                    }
                }
            }
            catch {

            }

        }

    }
    task.resume() }

致电;

getMahalle(addres: "http://alfa.reelim.com/ReelService.asmx/getMahalle?ilce=nilüfer") 

错误是:致命错误:在解包可选值时意外发现nil

我不明白为什么url = nil。

3 个答案:

答案 0 :(得分:0)

override func viewDidLoad() {
    super.viewDidLoad()


let secilenIlce = UserDefaults.standard.object(forKey: "secilenIlce") as? NSString
    if let yansiyan = secilenIlce {

        degerMahalle = yansiyan as String
    } mahalleCek(adres: "http://alfa.reelim.com/ReelService.asmx/getMahalle?ilce=\(degerMahalle)")}

答案 1 :(得分:0)

转义不支持的字符:

guard let escaped = urlString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed),
      let url = URL(string: escaped)
    else {
        fatalError("Better handle the error")
}

答案 2 :(得分:0)

Adding percent encoding应该做的工作:

let urlString = adres.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlFragmentAllowed)
let url = URL(string: urlString!) // Take care of forced wrapping

// Here this url: http://alfa.reelim.com/ReelService.asmx/getMahalle?ilce=Ö
// will become this: http://alfa.reelim.com/ReelService.asmx/getMahalle?ilce=%C3%96
let task = URLSession.shared.dataTask(with: url!) // Take care of forced wrapping
{ 
   (data,urlresponse, error) in

    // parsing here
}

doc的一部分:

  

重要   您不能在已经存在的字符串上调用此方法   百分比编码。 在已经存在的字符串上调用此方法   百分比编码将导致百分比编码的百分比字符   序列被百分比编码两次。

  

返回值如果转换,则返回已编码的字符串或nil   是不可能的