条件绑定的初始化器必须是 Optional 类型,而不是 'String'
Initializer for conditional binding must have Optional type, not 'String'
更新到 Swift 2.0
后,我 运行 遇到了一个有趣的问题
错误在if let url = URL.absoluteString
行
func myFormatCompanyMessageText(attributedString: NSMutableAttributedString) -> NSMutableAttributedString
{
// Define text font
attributedString.addAttribute(NSFontAttributeName, value: UIFont(name: "Montserrat-Light", size: 17)!, range: NSMakeRange(0, attributedString.length))
return attributedString
}
func textView(textView: UITextView, shouldInteractWithURL URL: NSURL, inRange characterRange: NSRange) -> Bool {
if let url = URL.absoluteString {
if #available(iOS 8.0, *) {
VPMainViewController.showCompanyMessageWebView(url)
}
}
return false
}
absoluteString
不是可选值,它只是一个字符串。您可以检查 URL 变量是否为 nil
if let url = yourURLVariable {
// do your textView function
} else {
// handle nil url
}
编译器告诉您不能使用 if let
,因为它完全没有必要。您没有任何可选项要解包:URL
不是可选的,absoluteString
属性 也不是可选的。 if let
专门用于解包可选值。如果你想创建一个名为 url
的新常量,就这样做:
func textView(textView: UITextView, shouldInteractWithURL URL: NSURL, inRange characterRange: NSRange) -> Bool {
let url = URL.absoluteString
if #available(iOS 8.0, *) {
VPMainViewController.showCompanyMessageWebView(url)
}
return false
}
然而,旁注:有一个名为 URL
的参数和一个名为 url
的局部常量非常令人困惑。你可能会过得更好:
func textView(textView: UITextView, shouldInteractWithURL URL: NSURL, inRange characterRange: NSRange) -> Bool {
if #available(iOS 8.0, *) {
VPMainViewController.showCompanyMessageWebView(URL.absoluteString)
}
return false
}
注:参考问题
Guard or if 条件用于确保值不存在时它不应崩溃。但是函数参数确保 (URL: NSURL) 会出现,或者任何确保值确实出现的场景都不需要检查 if let 或 guard 语句。这就是编译器在教育开发人员。尝试删除 if let 或 guard 语句,在这种情况下它应该可以工作
更新到 Swift 2.0
错误在if let url = URL.absoluteString
行
func myFormatCompanyMessageText(attributedString: NSMutableAttributedString) -> NSMutableAttributedString
{
// Define text font
attributedString.addAttribute(NSFontAttributeName, value: UIFont(name: "Montserrat-Light", size: 17)!, range: NSMakeRange(0, attributedString.length))
return attributedString
}
func textView(textView: UITextView, shouldInteractWithURL URL: NSURL, inRange characterRange: NSRange) -> Bool {
if let url = URL.absoluteString {
if #available(iOS 8.0, *) {
VPMainViewController.showCompanyMessageWebView(url)
}
}
return false
}
absoluteString
不是可选值,它只是一个字符串。您可以检查 URL 变量是否为 nil
if let url = yourURLVariable {
// do your textView function
} else {
// handle nil url
}
编译器告诉您不能使用 if let
,因为它完全没有必要。您没有任何可选项要解包:URL
不是可选的,absoluteString
属性 也不是可选的。 if let
专门用于解包可选值。如果你想创建一个名为 url
的新常量,就这样做:
func textView(textView: UITextView, shouldInteractWithURL URL: NSURL, inRange characterRange: NSRange) -> Bool {
let url = URL.absoluteString
if #available(iOS 8.0, *) {
VPMainViewController.showCompanyMessageWebView(url)
}
return false
}
然而,旁注:有一个名为 URL
的参数和一个名为 url
的局部常量非常令人困惑。你可能会过得更好:
func textView(textView: UITextView, shouldInteractWithURL URL: NSURL, inRange characterRange: NSRange) -> Bool {
if #available(iOS 8.0, *) {
VPMainViewController.showCompanyMessageWebView(URL.absoluteString)
}
return false
}
注:参考问题
Guard or if 条件用于确保值不存在时它不应崩溃。但是函数参数确保 (URL: NSURL) 会出现,或者任何确保值确实出现的场景都不需要检查 if let 或 guard 语句。这就是编译器在教育开发人员。尝试删除 if let 或 guard 语句,在这种情况下它应该可以工作