swift2 条件绑定的初始值设定项必须具有Optional类型,而不是“String”

rta7y2nd  于 2022-11-23  发布在  Swift
关注(0)|答案(3)|浏览(364)

这是我在更新到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
}
o2gm4chl

o2gm4chl1#

编译器告诉你不能使用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
}
ifmq2ha2

ifmq2ha22#

absoluteString不是可选值,它只是一个字符串。您可以检查URL变量是否为nil

if let url = yourURLVariable {
    // do your textView function
} else {
    // handle nil url
}
3gtaxfhh

3gtaxfhh3#

关于问题的说明:
Guard或if条件用于确保如果值不存在,则不会崩溃。但函数参数确保(URL:NSURL)会出现,或者任何确保值确实出现的情况都不需要用if let或guard语句进行检查。这是编译器对开发人员的教育。在这种情况下,尝试删除if let或guard语句,它应该会工作

相关问题