web-dev-qa-db-fra.com

L'initialiseur pour la liaison conditionnelle doit avoir un type facultatif, pas 'String'

Voici un problème amusant que je rencontre après la mise à jour vers Swift 2.0

L'erreur est sur la ligne 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
}
29
mosaic6

Le compilateur vous dit que vous ne pouvez pas utiliser un if let car c'est totalement inutile. Vous n'avez pas d'option à décompresser: URL n'est pas facultatif, et la propriété absoluteString n'est pas facultative non plus. if let est utilisé exclusivement pour déballer les options. Si vous voulez créer une nouvelle constante nommée url, procédez comme suit:

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
}

Cependant, sidenote: avoir un paramètre nommé URL et une constante locale nommée url est très déroutant. Vous pourriez être mieux comme ça:

func textView(textView: UITextView, shouldInteractWithURL URL: NSURL, inRange characterRange: NSRange) -> Bool {
    if #available(iOS 8.0, *) {
        VPMainViewController.showCompanyMessageWebView(URL.absoluteString)
    }
    return false
}
44
andyvn22

absoluteString n'est pas une valeur facultative, c'est juste une chaîne. Vous pouvez vérifier si la variable d'URL est nulle

if let url = yourURLVariable {
    // do your textView function
} else {
    // handle nil url
}
0
Chris Slowik