swift - Swift 缺乏动态能力对开发时有什么影响?

标签 swift

<分区>

我是 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 — 不过,可以肯定的是,由于“轻量级泛型”,今天这不太可能给您带来麻烦)。

关于swift - Swift 缺乏动态能力对开发时有什么影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38107791/

相关文章:

ios - Swift 中没有调用 UIProgressView 的 observeValueForKeyPath

ios - bringSubviewToFront 将 UIView 移回原始位置

swift - 将 notificationCenter 观察器添加到特定的 NSTextField - MacOS

ios - Swift 3 和 Xcode 8.2 中用户通知的条件编译

linux - 无法构建 Objective-C 模块 'CGtk'

android - 是否可以将 iOS Multipeer Connectivity 与 android 连接?

ios - 修复 Swift simd 库中的错误(以及缺少文档?)

ios - 如何在TableView的每一行添加按钮、图片等UI元素? (iOS, swift )

ios - 为什么 scrollview 仍然滚动,即使它没有 contentView 可以滚动到

ios - 如何使用 Typhoon 将属性注入(inject)基类