斯威夫特:这个错误:'private(set)'修饰符不能应用于只读属性是啥意思?

Posted

技术标签:

【中文标题】斯威夫特:这个错误:\'private(set)\'修饰符不能应用于只读属性是啥意思?【英文标题】:Swift: What does this error: 'private(set)' modifier cannot be applied to read-only properties mean?斯威夫特:这个错误:'private(set)'修饰符不能应用于只读属性是什么意思? 【发布时间】:2018-01-21 10:40:24 【问题描述】:

如果我们可以创建只读的计算属性,我有点困惑:

extension ToMyClass 
    private(set) var isEmpty: Bool 
        return head == nil
    
 

在尝试创建时出现以下错误:

 error: 'private(set)' modifier cannot be applied to read-only properties

【问题讨论】:

【参考方案1】:

您正在尝试为计算属性设置修改器,该属性始终是只读的

以下代码取自:The Swift Programming Language (Swift 4)

struct TrackedString 
    private(set) var numberOfEdits = 0
    var value: String = "" 
        didSet 
            numberOfEdits += 1
        
    

应该是存储属性

【讨论】:

非常感谢。我真的错过了“计算属性,它始终是只读的”【参考方案2】:

我遇到了同样的错误,但原因完全不同。我的代码是这样的:

protocol Foo 
    var bar: String  get 

class Baz: Foo 
    private (set) let bar: String // Error
    
    init(bar: String) 
        self.bar = bar
    

我只需要改变:

private (set) let bar: String

到:

private (set) var bar: String

let 使属性不可变,这会导致问题。

【讨论】:

以上是关于斯威夫特:这个错误:'private(set)'修饰符不能应用于只读属性是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

异步任务不会更改外部变量。斯威夫特 3

UISearchDisplayController 错误 - 斯威夫特

错误:执行被中断,原因:断点 1.2。 Xcode 7.1,斯威夫特

Java中的get()和set()

Swift 3.0 转换错误

Private Sub、Function 和 Class 的区别