2014-06-10 19 views
0

我想打電話給substringWithRange上的選項字符串,但多次實驗後的String有問題我還沒有能夠得到它來編譯:試圖調用substringWithRange上可選

var mdn:String? 
var subscriber = CTSubscriber() 
var carrierToken = subscriber.carrierToken 
mdn = NSString(data:carrierToken, encoding:NSUTF8StringEncoding) 
let range:NSRange = NSRange(location: 0, length: 10) 
if mdn 
{ 
    let subString = mdn!.substringWithRange(range) 
} 

這將導致編譯錯誤,說可選的NSString的值未解包。 我以爲它已經被解包了! 如果我刪除!那麼我得到一個錯誤說String?沒有名爲substringWithRange的成員。

+0

即如前(即其未展開),得到相同的錯誤消息 – Gruntcakes

回答

2

更換

var mdn:String? 

var mdn:NSString? 

您正在使用VAR來存儲NSString,所以你應該給它正確的類型。雖然StringNSString相互轉讓的,它是不一樣的類型。

String沒有substringWithRange方法。

0

我認爲這實際上可能是一個編譯器錯誤。我會把它報告給蘋果公司,看看他們是如何回來的。

然而,正確的方法,如果你需要從中獲得一些信息,展開一個可選的使用。 (就像獲得子,在你的榜樣)是:

if let theMdn = mdn { 
    let subString = theMdn.substringWithRange(range) 
} 

這樣,如果解纏成功,您的代碼塊纔會執行。

編輯: Sulthan的答案可能更準確。不過,我仍然認爲,如果您可以在let塊中打開可選項,則應該可以手動完成。