我遇到了网址的问题,这是我的代码;
我的功能;
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。
答案 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 是不可能的。