为什么Swift类型安全?

时间:2014-06-03 17:28:06

标签: ruby type-conversion swift

或多或少的Ruby monoglot,这对我来说从来都不清楚...... this question的答案解释了Swift中的类型安全功能(一般来说,我在猜测),但不是回答'为什么'?当然有一些性能或安全性好处,但究竟是什么呢?或者纯粹是后来的价值的严格性 - 开发人员的好处是知道一些函数肯定会执行(例如,在数组上.each)或运行时。

当我在Ruby中执行此操作时,我在不知不觉中采用了哪些权衡取舍

x = Float.new
x = 3
x = "a"
x = [a, "a", ['a'], {a: 'a'}]

与我在Swift中获得的相同优势:

var v: String
var x = 3
var y = "a"
var z = [
  a, 
  "a", 
  ['a'], 
  ['a': 'a']
]

如果这是太基本或多余的道歉 - 我没有找到类似的问题搜索SO。

1 个答案:

答案 0 :(得分:3)

Type-Safety不仅有助于运行时,也有助于编译时 它可以帮助坚持某些规则,并使代码更加明显。

Swift在运行时仍未检查类型,但在编译时进行检查已经有助于消除大量错误。在ObjC中你可以这样做:

NSString *string = (NSString *)@123;

是否会抛出错误?没有。编译时警告开发人员是否有意义?当然!

类型安全在很多方面都有意义,让我们来看一些例子。


实施例

请注意,其中一些是伪代码

还记得每个可能的事情使用id吗?那些日子已经过去了!

哪一个更明显?

var numbers: Array<Int> = [
    1, 2, 3, 4
]

NSArray *numbers = @[1, 2, 3, 4];

var fontAttributes: Dictionary<String, FontAttribute> = [
    Font.Weight : FontWeight.Bold,
    Font.Decoration : FontDecoration.None,
]

NSDictionary *fontAttributes = @{
    Font.Weight : FontWeight.Bold,
    Font.Decoration : FontDecoration.None,
}

var predicate = Predicate<Person>({ person in person.name == "John" })

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.name == %@", @"John"];