更新到 Swift 时出现明确指定的类型 'NSURL?' 问题 3
Explicitly specified type 'NSURL?' issue while updating to Swift 3
我在将我的 iOS 应用代码更新到最新版本的 Swift 时遇到问题。
我有一个功能:
public class func gifWithURL(gifUrl:String) -> UIImage? {
// Validate URL
guard let bundleURL:NSURL? = NSURL(string: gifUrl)
else {
print("SwiftGif: This image named \"\(gifUrl)\" does not exist")
return nil
}
// Validate data
guard let imageData = NSData(contentsOf: bundleURL! as URL) else {
print("SwiftGif: Cannot turn image named \"\(gifUrl)\" into NSData")
return nil
}
return gifWithData(data: imageData)
}
我在以下行收到警告:
guard let bundleURL:NSURL? = NSURL(string: gifUrl)
我收到警告:
Explicitly specified type 'NSURL?' adds an additional level of optional to the initializer, making the optional check always succeed
Xcode 允许我自动修复问题。当我执行此自动修复时,我的代码更改为:
guard let bundleURL:NSURL NSURL(string: gifUrl)
这显然不是正确的语法。
我不确定我需要 add/remove 什么才能使我的代码完全符合 Swift 3 标准并正常工作。
NSURL(string:)
将 return 可选 NSURL?
实例并且您已经选择用 guard
包装它所以删除 : NSURL?
因为您正在再次设置它optional
而不是 non-optional
同样,在 Swift 3 中使用原生 URL
and Data
而不是 NSURL
和 NSData
。整个代码就像。
guard let bundleURL = URL(string: gifUrl), let imageData = try? Data(contentsOf: bundleURL) else {
print("SwiftGif: This image named \"\(gifUrl)\" does not exist")
return nil
}
//Access the imageData here
注意: Data(contentsOf:)
会出现 throws
异常,因此您需要使用 do try catch
块捕获它。
你做的太复杂了。在Swift 3中,我们不使用NSURL
。只是 URL
:
guard let bundleURL = URL(string: gifUrl) else {
print("SwiftGif: This image named \"\(gifUrl)\" does not exist")
return nil
}
那你也可以摆脱危险的强制施法:
guard let imageData = NSData(contentsOf: bundleURL) else {
print("SwiftGif: Cannot turn image named \"\(gifUrl)\" into NSData")
return nil
}
我在将我的 iOS 应用代码更新到最新版本的 Swift 时遇到问题。
我有一个功能:
public class func gifWithURL(gifUrl:String) -> UIImage? {
// Validate URL
guard let bundleURL:NSURL? = NSURL(string: gifUrl)
else {
print("SwiftGif: This image named \"\(gifUrl)\" does not exist")
return nil
}
// Validate data
guard let imageData = NSData(contentsOf: bundleURL! as URL) else {
print("SwiftGif: Cannot turn image named \"\(gifUrl)\" into NSData")
return nil
}
return gifWithData(data: imageData)
}
我在以下行收到警告:
guard let bundleURL:NSURL? = NSURL(string: gifUrl)
我收到警告:
Explicitly specified type 'NSURL?' adds an additional level of optional to the initializer, making the optional check always succeed
Xcode 允许我自动修复问题。当我执行此自动修复时,我的代码更改为:
guard let bundleURL:NSURL NSURL(string: gifUrl)
这显然不是正确的语法。
我不确定我需要 add/remove 什么才能使我的代码完全符合 Swift 3 标准并正常工作。
NSURL(string:)
将 return 可选 NSURL?
实例并且您已经选择用 guard
包装它所以删除 : NSURL?
因为您正在再次设置它optional
而不是 non-optional
同样,在 Swift 3 中使用原生 URL
and Data
而不是 NSURL
和 NSData
。整个代码就像。
guard let bundleURL = URL(string: gifUrl), let imageData = try? Data(contentsOf: bundleURL) else {
print("SwiftGif: This image named \"\(gifUrl)\" does not exist")
return nil
}
//Access the imageData here
注意: Data(contentsOf:)
会出现 throws
异常,因此您需要使用 do try catch
块捕获它。
你做的太复杂了。在Swift 3中,我们不使用NSURL
。只是 URL
:
guard let bundleURL = URL(string: gifUrl) else {
print("SwiftGif: This image named \"\(gifUrl)\" does not exist")
return nil
}
那你也可以摆脱危险的强制施法:
guard let imageData = NSData(contentsOf: bundleURL) else {
print("SwiftGif: Cannot turn image named \"\(gifUrl)\" into NSData")
return nil
}