2017-07-05 243 views
0

我有下面的類:更改類屬性

class Message { 
    var content: [String]? 

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

我想content是一個字符串數組,這總是大寫。即使小寫文本設置爲content。 我似乎無法使用此計算屬性

回答

4

可以使用屬性觀察者didSet當它被設置爲應用uppercased()到數組:

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() } 
    } 
} 
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,它將計算大寫形式。

0
init(content: [String]) { 

    self.content = content 
    self.setupMyProperty() 

} 

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

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

但是如果我想初始化後改變'content'什麼? – Marmelador

+0

可能b這是不正確的方式,但我認爲它會工作。 –