2017-07-05 10 views
0

を設定するとき、私は以下のクラスを持っている:変更クラスのプロパティ

class Message { 
    var content: [String]? 

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

私はcontentはいつも大文字される文字列の配列になりたいです。小文字のテキストがcontentに設定されている場合でも。 私はこのために計算されたプロパティを使用することができないようです

答えて

4

は、あなたはそれが設定されている場合、配列にuppercased()を適用するプロパティオブザーバdidSetを使用することができます。

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

これは正しい方法ではないかもしれませんが、私はうまくいくと思います。 –

関連する問題