设置时更改类属性

时间:2017-07-05 11:25:03

标签: ios swift class

我有以下课程:

class Message {
    var content: [String]?

    init(content: [String]) {
        self.content = content
    }
}

我希望content是一个字符串数组,它总是大写。即使小写文本设置为content。 我似乎无法使用此

的计算属性

3 个答案:

答案 0 :(得分:4)

您可以拥有一个内部变量来存储实际内容,并且计算属性对外部可见。如果设置了公共属性,它将计算内部(大写)表示。

class Message {
    private var _content: [String]?
    var content: [String]? {
        get {
            return _content
        }
        set (new) {
            if let new = new {
                _content = new.map { $0.uppercased() }
            } else {
                _content = nil
            }
        }
    }

    init(content: [String]?) {
        self.content = content
    }
}    

您甚至可以在初始值设定项中指定content,它将计算大写字母表示。

答案 1 :(得分:4)

您可以使用属性观察者 didSetuppercased()应用于数组:

class Message {
    var content: [String]? {
        didSet {
            if let arr = content {
                self.content = arr.map { $0.uppercased() }
            }
        }
    }

    init(content: [String]) {
        self.content = content.map { $0.uppercased() }
    }
}

答案 2 :(得分:0)

init(content: [String]) {

    self.content =  content
    self.setupMyProperty()

 }

 func setupMyProperty() {
        let arrCaps = self.content.map{$0.uppercased()}

       self.content.removeAll() 
      self.content = arrCaps
    }