键入' String?'不符合协议' _CollectionType'

时间:2014-12-31 11:17:35

标签: ios swift

var desc = item.itemDescription
let regex:NSRegularExpression  = NSRegularExpression(
   pattern: "<.*?>",
   options: NSRegularExpressionOptions.CaseInsensitive,
   error: nil)!
let range = NSMakeRange(0, countElements(desc))
let htmlLessString :String = regex.stringByReplacingMatchesInString(desc,
   options: NSMatchingOptions.allZeros,
   range:range ,
   withTemplate: "")

let range = NSMakeRange(0, countElements(desc))

有一个错误说'Type'字符串?'不符合协议'_CollectionType'。

我知道如何解决这个问题?

我正在运行XCode 6.1.1

2 个答案:

答案 0 :(得分:2)

问题是desc是字符串可选,即String?。您可以隐式解开它以便在countElements中使用它,如下所示:

var desc = item.itemDescription as String!

但请注意,itemDescription可能是一个可选的原因,并且当没有可用的项目描述时它可能会返回nil,因此当您尝试在{{1}中使用它时会导致错误操作。

修改

BETTER YET,有条件地设置使用Swift的这个很好的功能一步打开您的描述字符串,称为"Nil Coalescing Operator"(AirspeedVelocity在评论中介绍给我)。

  

nil合并算子(a ?? b)打开一个可选的a if   包含一个值,如果a为nil,则返回默认值b。

要利用此功能,只需将countElements行更改为以下内容:

var desc

答案 1 :(得分:0)

您的var desc必须是[{1}}或String!类型,而不是String类型

只需修理它就可以了。

最干净的方法是:

String?