Подтвердить что ты не робот

Инициализатор для условной привязки должен иметь необязательный тип, а не "String"

Вот забавная проблема, с которой я столкнулся после обновления до Swift 2.0

Ошибка в строке if if 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
}
4b9b3361

Ответ 1

Компилятор говорит вам, что вы не можете использовать 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
}

Однако, sidenote: с параметром с именем URL, а локальная константа с именем URL может сбить с толку. Возможно, вам будет лучше:

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

Ответ 2

Вот ваша рабочая функция:

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
}

В аргументе функции сделайте URL необязательным.

И разверните его следующим образом:

if let url = URL?.absoluteString {

    //your code.
}

Ответ 3

absoluteString не является необязательным значением, а просто строкой. Вы можете проверить, нет ли переменной URL nil

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