我是 CS 学生,对 Cocoa/CocoaTouch 比较陌生,我想了解 OS X/iOS 开发人员的本质。我了解动态语言和静态语言之间的区别。
Static languages have all variables bound to a type etc. Variables are bound during execution for dynamic etc.
但是,当我开发 OS X 应用程序时,我很难看到动态功能会改变事物的示例?有人可以解释一下有人可以解释在开发应用程序时 Obj-C 可以支持哪些 Swift 根本不能支持的内容吗?
我遇到过很多情况,缺乏灵 active 迫使我重构我的代码,但这不是我要说的,或者我很困惑?
Can someone explain what someone explain what Obj-C can support that Swift fundamentally cannot when developing apps
我过去在 Objective-C 中利用的与其说是动态键入,不如说是动态消息传递。整个消息传递装置可以在运行时重新调整,从简单的键值编码或 performSelector
到在运行时将方法动态注入(inject)类、方法调配和键值观察。
你可以在 Swift 中做所有这些事情,但前提是你正在与 Objective-C 对话(即这是一个 NSObject)。那是因为所有这些事情实际上都是在 Objective-C 中完成的。例如,在没有 Foundation 的情况下,您甚至无法在纯 Swift 中实现最基本的键值编码,因为 Swift 既没有动态消息传递也没有真正的内省(introspection)。
但是,从实际应用程序编程的角度来看,我不会错过任何一个。一方面,我总是在与 Objective-C 交谈,因为 Cocoa 在 Objective-C 中。另一方面,事实证明这些技巧中的大多数并不是真正必要的,而且我大多找到了其他方法来实现我的实际目标。我仍然使用一些键值编码(尤其是做一些技巧,比如在 CALayer 中存储任意值),但总的来说,我已经减少了对这些东西的使用,主要是因为函数是第一位的-Swift 中的类公民。
至于动态打字,我一刻也不想错过;改用 Swift 实际上 避免了 我犯了一些错误,但我什至没有意识到这是因为 API 强加给我的动态类型(例如,objectAtIndex:
返回了一个id
— 不过,可以肯定的是,由于“轻量级泛型”,今天这不太可能给您带来麻烦)。