条件绑定的初始化程序必须具有Optional类型,而不是'String'
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了条件绑定的初始化程序必须具有Optional类型,而不是'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
}
答案
编译器告诉你不能使用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
}
另一答案
absoluteString
不是可选值,它只是一个字符串。您可以检查URL变量是否为零
if let url = yourURLVariable {
// do your textView function
} else {
// handle nil url
}
以上是关于条件绑定的初始化程序必须具有Optional类型,而不是'String'的主要内容,如果未能解决你的问题,请参考以下文章
条件绑定的初始化程序必须具有Optional类型,而不是'String'
条件绑定的初始化器必须具有 Optional 类型,即使它是 Optional 类型
条件绑定:if let error - 条件绑定的初始化程序必须具有可选类型
条件绑定:if let error - 条件绑定的初始化程序必须具有可选类型
如何修复条件绑定的初始化程序必须具有可选类型,而不是“字符串”? [复制]
用于条件绑定的 Swift Initializer 必须具有 Optional 类型,而不是 '[AVCaptureDevice]'