- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
场所:
结论:只要有可能,就应该使用值类型和协议(protocol),只有在完全必要时才恢复到类。
提问:那么,包含值类型的类的作用是什么?这些封装类是否符合 Swift 范式,或者它们是 OOP 的遗留物?
基本案例:Swift 中的以下做法是好是坏:
struct Attribute {
let name: String
var value: Int
}
final class AttributeManager {
var attributes: [Attribute] = []
func add(attribute: Attribute) { self.attributes.append(attribute) }
}
最佳答案
您陈述的某些前提是错误的。
Swift 是多范式通用语言。它没有 OOP 只是因为兼容性和互操作性。多范式语言允许开发人员为特定工作选择最合适的编码范式。
此外,一些概念与单一范式并不严格相关。值类型不仅仅是功能性的,它们构成了结构语言中的基本类型。许多非函数式 OOP 语言也支持超出基本原始值类型的值类型。
所谓的面向协议(protocol)编程只是基于接口(interface)编程的另一种形式和扩展——面向对象编程的核心概念之一。
关于将值类型包装到类中是好是坏的问题无法回答,因为这取决于您将如何使用该类。
类和结构的行为略有不同。有时这种差异无关紧要,因此您可以在它们之间自由选择,有时确实如此,您将不得不使用适合您需要的那个。
在您的代码示例中,将 AttributeManager
定义为类而不是结构的主要区别是共享对其 attributes
字段的更改。如果您处理类实例,您可以将其作为参数传递,并且您可以跨代码对 attributes
字段进行更改并保留更改。使用值类型变量执行此操作更加复杂,并且需要使用 in-out 参数或通过函数返回值返回更改的结构。类在这里提供了更多的灵 active 。此外,使用结构与单例模式相矛盾,在单例模式中,您需要有一个且只有一个实例可以改变其状态。
每个编程范式和相关概念都提供了特定问题的解决方案,但它们也引入了一些其他问题。当您选择一种编码范式而不是另一种时,您应该根据您要解决的问题来选择它。
进一步阅读:Swift Is Not Functional
关于swift - 封装类是否反射(reflect)了 Swift 3 范例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41787523/
在我看来,jQuery 似乎并不是作为 OOP 框架编写的,它似乎太短,而且不够详细。我的想法是否正确?如果它不是以 OOP 形式编写的,那么他们使用的是什么方法/范式? 最佳答案 我怀疑该方法是:使
假设我们有两条 CD 信息 标题 艺术家 国家 公司 价格 年份 Empire Burlesque
开始学习之前,我们先来看一个简单的 SVG 范例, 包含了 SVG 的一些基本要素 简单的 SVG 实例 我们来画一个简单的 SVG 圆形 这里是SVG文件(SVG文件的保存与SVG扩展) &
下面这些范例演示了 XML 文件、XML 格式化和 XML 转换 ( XSLT ) 还演示了与 XML 一起使用的 JavaScript ( AJAX ) 查看 XML 文件 1、 查看一个简单
本章节,我们通过一些范例来学习一些基础的 XPath 语法 XPath 范例文档 我们将在下面的例子中使用这个 XML 文档 books.xml <?xml version="
在XLink和 XPointer 语法 章节,我们讲到可以在 xlink:href 属性中把 XPointer 部分添加到 URL 后面,这样就可以导航到文档中某个具体的位置 现在,让我们通过一个范
我的 Android 模拟器包含“API 演示”列表,包括 App->Device Admin 部分中一个漂亮的密码 PIN 表单(经过验证)。 知道在哪里可以找到源代码吗?或者有人知道用户 PIN
iDevRecipes是一个很棒的网站,它详细介绍了一些流行的和特定的 iPhone 组件是如何开发的。我想知道 SO 工作人员是否知道其他类似的网站?这将对所有 iOS 开发人员有很大帮助。 最佳答
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在尝试使用 React 创建 Aurelia 自定义元素,方法是按照 Aurelia Q & A 上的示例进行操作并发生以下异常: Potentially unhandled rejection
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Real world examples of @optional protocol methods 最近我开
我正在尝试使用多线程在 Java (Swing) 中实现 MVC 范例。目前,我正在用 Observer 类扩展 View 类,用 Observable 类扩展 Model 类,并且它工作正常(我的代
场所: 理想情况下,一种语言中的程序应尝试匹配该语言所归属的范例的方式。 在 Swift 中,这些范例主要是面向协议(protocol)的编程,其次是函数式编程。 出于兼容性和互操作性的原因,Swif
在 MVC 中,一个模型可以有多个 View ,而在 WPF 中,XAML 代码隐藏模型严格限制为 1 个 XAML( View ),难道 WPF/XAML 从一开始就没有 MVC 方面的缺陷吗? 最
我有一个类,比方说,它计算一个人的保险风险,并且在计算过程中计算了一些其他变量。稍后我需要访问风险和其他变量。 class InsuranceRiskModel: self.risk = No
我是一名优秀的程序员,十分优秀!