【发布时间】:2019-05-20 23:13:05
【问题描述】:
从 Objective-C 文件(它是一个混合的 Obj-C 和 Swift 项目)中调用了很多以下方法,在某些情况下,我似乎得到了一个 NSString 的 nil 值,它抛出了一个异常。根据this post,Swift 隐式地将 NSString 转换为强制解包的 String!。如何处理 nil 的情况
我应该使用 if let 语句吗?如果是这样,语法是什么?我无法让它工作。
@objc func download(surl: NSString, completion : @escaping (NSData) -> Void ) {
guard let url = URL(string: String(surl)) else {
//print("Can not get url with " , surl )
return }
let sessionConfig = URLSessionConfiguration.default
let session = URLSession(configuration: sessionConfig, delegate: nil, delegateQueue: nil)
let task = session.dataTask(with: url) { data, response, error in
if let data = data, error == nil {
let nsdata = NSData(data: data)
DispatchQueue.main.async {
completion(nsdata)
}
} else {
// print("Failure: %@", error?.localizedDescription);
}
}
task.resume()
}
【问题讨论】:
-
我看到这段代码不会崩溃,但不能避免 nils 这在很大程度上取决于你的 url/data 的有效性
-
你确定是 NSString 是 nil 而不是 URL 吗?我不会想到给定一个 NSString 参数是可能的——只有一个 optional NSString? value 应该被允许为 nil。也许你得到的字符串 (surl) 只是一个无效的 URL?
-
按 string.count 如果您有 0 个计数,则字符串必须为空或 nil。所以你可以在你的代码中应用 string.count 来识别字符串 nil 与否。
标签: ios swift nsstring optional