2015-09-24 39 views
20

這是一個有趣的問題,我更新斯威夫特2.0初始值設定條件的結合必須有可選的類型,而不是「字符串」

後運行到該錯誤是在如果讓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 
} 
+0

你是否查找'absoluteString'方法的文檔?它是否返回一個可選項? –

+0

只是查了一下。不,它不返回一個可選的,但'relativeString'是 – mosaic6

回答

32

編譯器告訴你,因爲這是完全沒有必要的,你不能使用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 
} 
+0

我們可以在這裏使用警衛嗎? –

+0

@ iPhone6不,因爲同樣的原因,你不能使用'if let':因爲'URL.absoluteString' * always *成功。沒有什麼值得警惕的,''absoluteString'是非可選的,永遠不會'nil'。 – andyvn22

0

absoluteString不是一個可選值,它只是一個String。您可以檢查URL變量是零

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

'URL:NSURL'不是可選的,它不能爲零。 –

+0

這意味着在他的textView功能之外,爲了清晰起見將編輯 –

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. 
} 
+0

爲什麼聲明'URL'是可選的?根據https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITextViewDelegate_Protocol/,它不是。 –

相關問題