或多或少的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。
答案 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"];