Swift getter setterの処理-セッターゲッターとは
ゲッター、セッターとはそもそも何か?
コンピューテッドプロパティといって、値を保持せずに、算出するプロパティのこと。
??となるので、まずコードを参照。
コンピューテッドプロパティの定義はこのように記載
var プロパティ名:型名{ get{ 値を返す処理 } set{ 値を更新する処理 代入された値にはnewValueとしてアクセス可能 } }
実際に書いてみる
class Item { // 税抜き価格 var price:Double = 0 // 税込み価格 var intaxPrice:Double { // 値を取得するときに呼ばれる。 get{ return self.price*1.08 } // 値がセットされるときに呼ばれる。 set{ price = newValue/1.08 } } }
これを実行するとこうなる。
var item = Item() item.intaxPrice = 108.0 //intaxPriceはコンピューテッドプロパティで値を持たない、算出する //よってここでは、itemに100がセットされる print(item.price) //100になっている item.price = 150 //今度はpriceに値150をセット print(item.intaxPrice) //162になっている //intaxPriceには何も変更を加えていないのに、162になる //これが値を保持せずに、値を算出するということ
参考サイト 【Swift】セッター(Setter)、ゲッター(Getter)の処理を書く - Qiita
これができたから何?となると思います。
それで、実際に利用したソースを示します。
画面を越えて、値を状態を保持したいときなどに、利用します。
プロトコルを宣言して、そのプロトコルにゲッター、セッターを定義しておけば、そのプロトコルを利用したクラスでは、このゲッターセッターが利用できます。 左画面から右画面へテーブルビューへ表示する、配列を渡したいとします。 別Viewになっていますので、そのままでは値を渡せません。 ここで登場するのが、先程のゲッターセッター、そしてプロトコルです。
まずプロトコルの宣言 どこに記載しても良いです。
protocol wordDelegate { var ofDics:[DatDic]?{get set} }
ofDics という変数名で型は DatDic型の配列になっています。
そして{ }でゲッターセッターが宣言されています。 一つの値を変更すれば、もう片方に値がセットされると言うことです。
目的は左画面のtableViewに表示され、タッチしたところから下にあるものすべての配列を、右画面に渡します。
では、左画面のソースを見てみましょう。
//デリゲートのインスタンス var ofWord: wordDelegate? //テーブルをタッチしたときの処理 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { //配列の特定の行から最後までをdetailDicへ移動する ofWord?.ofDics = Array(datDics![indexPath.row..<datDics!.endIndex]) //ここでofWordを利用して、プロトコルのプロパティにアクセスしています。 //別の画面のプロパティになります。 }
では遷移先、右画面では、どのように記載するのでしょうか?
var ofDics: [DatDic]?{ set{//set newvalu=左でsetした値が入る datDics = newValue tableView.reloadData() //左でセットした値が入る。それでtableをリロードする。 } get{//setしたdatDicsを表示しているだけ return datDics } } //メンバ変数 ゲッターで帰ってきた値が詰め込まれるため。 var datDics:[DatDic]?
あとはTableViewにdatDicsを表示するだけ。 左から右に値を渡せました。