ios - 为什么需要在这个人类中添加 2 个私有(private)变量?

标签 ios xcode

我是 Swift 3 的 Ios 编程新手。我很好奇为什么需要在 Class 的 getter 和 setter 中创建私有(private) VAR?如果我不添加这 2 个私有(private) ( var ) 会发生什么?

class Person { 
    private var _firstname: String!
    private var _lastname: String!

    var firstname: String { 
        return _firstname 
    }

    var lastname: String { 
        return _lastname 
    } 

    var fullname: String { 
        return "\(firstname) \(lastname)"
    } 
}

最佳答案

具有公开的只获取计算属性的私有(private)存储属性是一种旨在使变量公开但将 setter 保持私有(private)的模式。实现此目的的更简洁的方法是为存储的属性指定一个私有(private) setter ,从而消除对这些计算属性的需要:

class Person { 
    private(set) var firstname: String!
    private(set) var lastname: String!

    var fullname: String { 
        return "\(firstname ?? "") \(lastname ?? "")"
    } 
}

请注意,如果您已将这些定义为隐式解包,那么您的 fullname 计算属性可能想要安全地解包它们,如上所示。

或者,如果名称不能更改,您可以将它们定义为由初始化程序设置并且再也不会更改的常量:

struct Person {
    let firstname: String!
    let lastname: String!

    var fullname: String {
        return "\(firstname ?? "") \(lastname ?? "")"
    }
}

完全不相关,我不确定在这种情况下我会建议隐式包装可选值。隐式解包选项的目的是针对无法在初始化程序中设置的属性,但一旦设置,它们就永远不会是 nil

不过,通常在处理联系人时,您必须考虑他们可能为 nil 的情况。在那种情况下,我不会让它们隐式展开可选值(例如,我可能会使用 ? 而不是 !)。或者,如果它们不能为 nil,我会确保在初始化程序中设置它们,然后根本不将它们设为可选。这完全取决于您将使用此定义捕获的业务规则。我假设您有充分的理由制作这些隐式解包的可选值,但为了 future 的读者,我只警告人们应该警惕过于随意地使用隐式解包的可选值。

关于ios - 为什么需要在这个人类中添加 2 个私有(private)变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41519370/

相关文章:

ios - 定位 ARKIT 模型

ios - Xcode 7 归档失败

iPhone 崩溃日志

ios - UICollectionView Cell中的动态宽度大小问题

ios - 如何制作pushViewController : work in the following case?

ios - 如何处理在密码锁定的 iOS 设备上点击推送通知横幅?

swift - 在 textView 中使用未声明的类型 'URL'(_ :shouldInteractWith:in:)

ios - 选择深色模式后如何重新加载 View ?

ios - iPhone OS 与应用部署版本不匹配

swift - 在我的 xcode9 项目中导入 DisplaySwitcher - 不起作用