【问题标题】:Data strucure used in Swift Var and internal mapping of var to types [closed]Swift Var 中使用的数据结构和 var 到类型的内部映射 [关闭]
【发布时间】:2016-06-23 14:13:26
【问题描述】:

我是 Swift 的初学者

在Objective中,我们有独立的类型,它们有自己的数据结构。 例如:NsArray、NsDictionary 都会有自己的数据结构来存储值。

Swift Var 怎么样,如果我没有明确指定变量的类型,如果将数组值传递给它,它会自动假定它是一个 NSArray。

这里如何区分 NsArray 和 NSMutableArray 呢? 可能我为此找到了一个解决方案,即 let 用于不可变和 var 用于可变。

var 到特定类型的内部映射将如何发生? 映射会在运行时发生吗?如果我没有明确指定类型,这会导致我的代码变慢吗?

在 Swift 中让 let 作为 final 吗?

【问题讨论】:

  • 简单的建议:在 Swift 中,只有在别无选择的情况下才使用 Foundation 集合类型 (NS...)。
  • 欢迎来到 Stack Overflow!试着逐个提问,你在这里问了三个不同的问题。另外,这里还有no need to thank

标签: ios objective-c swift swift2


【解决方案1】:

在Objective-C中,有一个基类NSArrayNSMutableArray是一个子类。

如果你愿意,你仍然可以在 Swift 中使用这些类。

但是,Swift 的结构不同。在 swift 中,您声明一个变量或一个 constant 来指示容器是否可变:

let aNonMutableDictionary: [String:String] = 
  ["key1": "value1", "key2": "value2"];

这将创建一个常量字典(NSDictionary 的粗略 Swift 等价物)

如果你想要一个可变字典,使用

var aMutableDictionary: [String:String] = 
  ["key1": "value1", "key2": "value2"];

区别在于关键字letvarvar 关键字定义了一个变量(可变)。let 关键字定义了一个常量(不可变)。

您应该阅读 Swift 编程指南。简介很清楚地解释了这一点。

【讨论】:

    【解决方案2】:

    Swift Var 怎么样,如果我没有明确指定变量的类型,如果将数组值传递给它,它会自动假定它是一个 NSArray。

    Swift 不会“自动假定它是一个 NSArray”。 Swift 的Array 不同于NSArrayNSMutableArray。 Swift 将透明地将其Array 类型桥接到NSArray

    这里如何区分 NSArray 和 NSMutableArray?

    Swift 总是桥接到NSArray,它可以被传递到任何期望NSArrayNSMutableArray 的调用中(因为NSMutableArrayNSArray 的子类)。如果您想要 NSMutableArray,则需要明确指定。

    可能我为此找到了一个解决方案,即 let 用于不可变,var 用于可变。

    是的,Swift 在分配给var 变量时使用可变版本的Array,而在分配给let 常量时使用不可变版本。

    var 到特定类型的内部映射将如何发生?映射会在运行时发生吗?

    什么意思?

    如果我没有明确指定类型,这会导致我的代码变慢吗?

    没有。 Swift 将尽可能使用不可变的数据结构,这在性能方面是有利的。让编译器的类型推断完成它的工作。

    注意:这些概念同样适用于其他类型,例如 String/NSString/NSMutableStringDictionary/NSDictionary/NSMutableDictionary

    【讨论】:

    • @ManojKumar,去阅读 Swift 编程语言 iBook。它在一开始就清楚地涵盖了这一点。
    • @DuncanC 我认为即使是语言指南也涵盖了这一点
    • 简答:“RTFM”
    猜你喜欢
    • 2019-11-29
    • 2015-01-29
    • 2020-03-28
    • 2015-12-26
    • 2019-06-07
    • 2016-06-14
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    相关资源
    最近更新 更多