Инициализатор для условной привязки должен иметь необязательный тип, а не "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
}
Ответы
Ответ 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
}