【问题标题】:Swift 2.2 breaks optionals/unwrapping optionalsSwift 2.2 打破了可选项/展开可选项
【发布时间】:2016-03-23 07:19:35
【问题描述】:

Swift 2.2 几乎破坏了我的所有代码。即使是这个简单的分配给标签的字符串也不再起作用了:

cell.categoryName.text = peopleArray![indexPath.row]["Name"] as? String

错误提示“从 'String?!' to 'String' 只解开可选项,你的意思是使用 '!!' 吗?"

我现在需要做什么改变。

编辑

更多问题:

if (dict["data"]!["DataDetails"] as! NSArray).count == 0 {
}

因此,我遇到了分段错误,错误显示如下:warning: cast from 'String?!'到不相关的类型 'NSArray' 总是失败

更新:

我在我的类中使用了 NSDictionaries、NSArrays,这似乎会导致问题。将所有文字从 Obj-C 更改为 swift 使代码正常工作。 所以,我也会推荐其他开发者更喜欢 swift 字面量。

【问题讨论】:

  • 使用 peopleArray!["Name"] as! String .. 但我建议不要使用强制解包 .. 使用 if let
  • Swift 2.2 在可选类型推断方面有一个回归——你的问题可能源于:stackoverflow.com/questions/36160934/…
  • 你能写出你如何定义你的peopleArray

标签: ios swift swift2.2


【解决方案1】:

使用swift类型和objective-c NS...类型时似乎有一些细微的差别

例如

let dic:NSDictionary? = ["a":"a"]

let str:NSString? = dic!["a"] as? NSString

let dic2:Dictionary? = ["b":"b"]

let str2:String? = dic2!["b"] //dont need to do any casting, already optional

print(str)
print(str2)

打印

Optional(a)
Optional("b")

因此,根据您的数组/字典的定义方式,您可能需要不同的转换/解包

【讨论】:

  • 不,它不起作用。但是如果我使用 peopleArray!["Name"]!!作为字符串,它可以工作,但我希望这是可选的。
  • peopleArray 定义为什么?
  • 定义为NSMutableArray
  • 你的意思是 NSMutableDictionary?因为您正在使用字符串“索引”
  • 我更新了我的问题。选项不起作用,仅供参考。
猜你喜欢
  • 1970-01-01
  • 2018-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多