应用程序崩溃并显示以下网址:
let jsonUrl = "http://api.com/??????/events"
let session = NSURLSession.sharedSession()
let shotsUrl = NSURL(string: jsonUrl)
let task = session.dataTaskWithURL(shotsUrl!)
Run Code Online (Sandbox Code Playgroud)
日志:
fatal error: unexpectedly found nil while unwrapping an Optional value
Run Code Online (Sandbox Code Playgroud)
这是因为网址中有西里尔文符号。我该如何解决这个问题。谢谢你的帮助!
Muh*_*raf 11
Swift 4
使用String Extension创建一个名为String + Extension.swift的swift文件并粘贴此代码
import UIKit
extension String{
var encodeUrl : String
{
return self.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)!
}
var decodeUrl : String
{
return self.removingPercentEncoding!
}
}
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:(根据问题进行采样):
"http://api.com/??????/events".encodeUrl
Run Code Online (Sandbox Code Playgroud)
尝试这个:
let encodedUrl = jsonUrl.stringByAddingPercentEncodingWithAllowedCharacters(URLQueryAllowedCharacterSet)
Run Code Online (Sandbox Code Playgroud)
像这样的东西:
let apiHost = "http://api.com/"
let apiPath = "??????/events"
let escapedPath = apiPath.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLHostAllowedCharacterSet())
let url = NSURL(string: "\(apiHost)\(escapedPath!)")
Run Code Online (Sandbox Code Playgroud)
显然,您应该做一些更聪明的事情,而不仅仅是 force unwrap escapedPath。
以 Swift 的 Wikipedia 页面为例:
https://ru.wikipedia.org/wiki/Swift_(????_????????????????)
变成:
https://ru.wikipedia.org/wiki/Swift_(%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)
Run Code Online (Sandbox Code Playgroud)
当粘贴到浏览器时,它会将您带到正确的页面(大多数浏览器会方便地为您呈现 UFT-8 字符)。
| 归档时间: |
|
| 查看次数: |
5445 次 |
| 最近记录: |