尝试在String上调用substringWithRange时遇到问题

时间:2014-06-10 21:53:02

标签: swift

我试图在一个选项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的成员。

2 个答案:

答案 0 :(得分:2)

替换

var mdn:String?

var mdn:NSString?

您正在使用var存储NSString,因此您应该为其指定正确的类型。虽然StringNSString可以相互分配,但它的类型不同。

String没有substringWithRange方法。

答案 1 :(得分:0)

我认为这实际上可能是编译器错误。我会向Apple报告,看看他们是如何回来的。

但是,如果您需要从中获取某些信息,请使用正确的方法来展开可选项。 (就像在你的例子中获得子字符串一样)是:

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

这样,只有在解包成功时才会执行您的代码块。

编辑: Sulthan的回答可能更准确。但是我仍然认为如果你可以在let块中打开可选项,你应该能够手动完成。