Swift 2.x到Swift 3,Xcode抱怨错误:类型' String'的非可选表达式用于检查选项

时间:2017-09-14 16:42:50

标签: swift

从Swift 2.x迁移到Swift 3,我的代码上有警告:

let response=NSString(data:data!,encoding: 
String.Encoding.utf8.rawValue)
let responseArray:Array=response!.components(separatedBy: "|VCSPACER|")
if let result:String=responseArray[0] {
  if let action:String=responseArray[1] {
    if let datas:String=responseArray[2] {
      .......
    }
  }
}

编译器在行警告:

"if let action:String=responseArray[0]" and line "if let action:String=responseArray[1]" and "line if let datas:String=responseArray[2]"

带有消息

  

"类型'字符串'的非可选表达式用于检查选项"

它完全适用于Swift 2.X但不适用于Swift 3.如何更改此代码才能使其正常工作?

1 个答案:

答案 0 :(得分:4)

请勿使用强制展开选项。强制解包使其成为非可选值,因此不能使用可选绑定。此外,数组下标不会返回一个可选值,因此,在解开数组后,不要尝试使用可选绑定来检查数组是否包含那么多元素,而是检查它是否包含您想要访问的元素数。

if let data = data,
   let responseArray = String(data: data, encoding: .utf8)?
                           .components(separatedBy: "|VCSPACER|"),
   responseArray.count > 2 {
    let result = responseArray[0]
    let action = responseArray[1]
    let datas = responseArray[2]
}