【问题标题】:Why does Swift have both NSDictionary and Dictionary classes?为什么 Swift 同时具有 NSDictionary 和 Dictionary 类?
【发布时间】:2014-12-09 04:34:08
【问题描述】:

我是新来的,所以请帮我解决这个问题。我想知道为什么 Swift 同时具有 NSDictionary 和 Dictionary 类?我的问题也适用于其他标准类,如 String/NSString、Array/NSArray 等。我问这个是因为我的代码有问题,必须做很多转换。 例如,我发现仅在 NSDictionary contentsOfFile 而不是在本机 Dictionary 类中将 plist 文件加载到字典中的方法,后者是与 Swift 一起使用的“广告”方式。

这是一个实现问题(Swift 是全新的)还是有更多、更深层次的原因需要使用旧的 Objective-C 类?有什么区别?

【问题讨论】:

  • Dictionary 不是一个类;它是一个结构

标签: ios swift nsdictionary


【解决方案1】:

为了简化您的问题,让我们以 NSString 为例

NSString是iOS开发中很长一段时间的类,是String的前身

String 是新的 Swift 特定字符串类,而 NSString 是较旧的目标 C 版本,并且有一种方法可以在两者之间进行转换或桥接,

根据 Apple “整个 NSString API 可用于调用您创建的任何 String 值”

现在为什么要这样做,因为 String 类目前不一定具有 NSString 上的所有方法,所以如果你想使用 NSString 的方法,你可以将 String 转换为 NSString 并利用这些方法方法

例如

// Double conversion
var strCon = Double(("3.14" as NSString).doubleValue)

// Contains String
var stack = "Stack overflow"
(stack as NSString).containsString("Stack")

// Substring
var overflow = (stack as NSString).substringToIndex(8)

简而言之,如果您正在尝试做某事并且似乎在 String 上没有可用的方法,我建议您查看 NSString,因为那里有很多方法,它可能会帮助您

NSDictionary、NSArray 等也是如此…… 希望对你有帮助

【讨论】:

  • 是的,它有很大帮助!当我开始使用 Swift 开发时,我认为有完整的实现,至少对于基本数据类型,如字符串或数组。我现在知道,比 String 更老的 NSString 有很多时间来发展和成熟,但 Swift 是在过去的 4 年里一直在酝酿中的(正如他们所说)......
【解决方案2】:

这两种类型都是为了在 swift 中使用 Objective-C 代码。 Swift 数组和字典是泛型类型,可以保存非类实例(enumstruct),而NSArray/NSDictonary 只能保存NSObject

【讨论】:

  • 谢谢!现在清楚多了。我发现 iOS 框架中 Swift 数据类型的糟糕实现很奇怪。
  • Swift 仍然是新的并且在不断变化。我想随着框架的成熟和变得更加健壮,对框架的支持将会到来。
猜你喜欢
  • 2014-10-22
  • 2015-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
  • 2016-07-01
相关资源
最近更新 更多