2017-02-04 17 views
6

に私は、この変数ゲッターセッター内スウィフト3

public var tick: Int64 { 
    get { 
     return UserDefaults.standard.object(forKey: TICK) as? Int64 ?? 0 
    } 
    set(v) { 
     let cur = UserDefaults.standard.object(forKey: TICK) as? Int64 ?? 0 + v 
     UserDefaults.standard.set(cur, forKey: TICK) 
    } 
} 

を使用しています。しかし、私が知りたい、それは内部セッターゲッターを呼び出すための適切な方法は何ですか?私は意味:

set(v) { 
    let cur = /*HOW TO CALL GETTER HERE? */ + v 
    UserDefaults.standard.set(cur, forKey: TICK) 
} 

私はself代わりの/*HOW TO CALL GETTER HERE? */を使用している場合、それは動作しません。次のようにゲッターとセッターと計算された変数の標準的な実装である

答えて

9

あなたは、単に古い値を取得するには、そのセッター内の値(tick)を呼び出すことができます。

public var tick: Int64 { 
    get { 
     return UserDefaults.standard.object(forKey: TICK) as? Int64 ?? 0 
    } 
    set(v) { 
     let cur = tick + v 
     UserDefaults.standard.set(cur, forKey: TICK) 
    } 
} 
1

private var stored: String 

public var computed: String { 
    get { 
     return stored 
    } 
    set { 
     stored = newValue 
    } 
} 

newValueセッター定義には適用されている値を表します。

struct SomeStruct { 
    private var stored: String = "" 

    public var computed: String { 
     get { 
      return self.stored 
     } 
     set { 
      self.stored = newValue 
     } 
    } 
} 

var value = SomeStruct() 
print(value.computed) 
value.computed = "new string" 
print(value.computed) 

あなたが本当にあなたのセッターの定義にゲッターを参照したい場合、あなたはできます。あなたが見ることが遊び場に次のように投げることができ

public var computed: String { 
    get { 
     return self.stored 
    } 
    set { 
     self.stored = self.computed == "" ? self.computed : newValue 
    } 
} 

これも有効であり、あなたの条件に合うことができる必要があります:おそらく、あなただけのゲッターの条件のいくつかの種類に基づいてセッターにnewValueを適用したいと思います。

+0

だから、方法はゲッターを呼び出すするには? – Vyacheslav

+0

あなたのセッター定義の 'tick 'を参照するのを止めることは何もありません。 @Vyacheslav –

+0

私はゲッターを呼びたい。そのため、より複雑なロジックが含まれている可能性があります – Vyacheslav