Initializer for conditional binding must have Optional type, not 'String' Initializer for conditional binding must have Optional type, not 'String' swift swift

Initializer for conditional binding must have Optional type, not 'String'


The compiler is telling you that you can't use an if let because it's totally unnecessary. You don't have any optionals to unwrap: URL is not optional, and the absoluteString property isn't optional either. if let is used exclusively to unwrap optionals. If you want to create a new constant named url, just do it:

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}

However, sidenote: having a parameter named URL and a local constant named url is mighty confusing. You might be better off like this:

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


absoluteString isn't an optional value, its just a String. You can check if the URL variable is nil

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