2017-06-20 16 views
0

Swiftで便利なサブスクリプトのセッターを定義できますか?Swift便利なサブスクリプト

extension Matrix { 
    subscript(_ i: Int, _ j: Int) -> Double { 
    get { 
     return value(atRow: i, column: j) 
    } 
    set { 
     setValue(newValue, row: i, column: j) 
    } 
    } 
} 

をし、また、私は手動でキャストの疲れ以来、フロート受け入れセッターを定義したい:

たとえばのは、私がきたとしましょう。私はしたい:

extension Matrix { 
    subscript(_ i: Int, _ j: Int) -> Double { 
    get { 
     return value(atRow: i, column: j) 
    } 
    set { 
     setValue(newValue, row: i, column: j) 
    } 
    } 

    subscript(_ i: Int, _ j: Int) -> Float { 
    set { 
     setValue(Double(newValue), row: i, column: j) 
    } 
    } 
} 

しかし、私は2番目の下付き文字はゲッターを持っていないので、これを行うことはできません。

答えて

1

スウィフトは(JavaやC++とは違って)戻り値にオーバーロードすることができますので、あなたがFloatゲッターを追加することができます。

extension Matrix { 
    subscript(_ i: Int, _ j: Int) -> Double { 
     get { return value(atRow: i, column: j) } 
     set { setValue(newValue, row: i, column: j) } 
    } 

    subscript(_ i: Int, _ j: Int) -> Float { 
     get { return Float(value(atRow: i, column: j)) } 
     set { setValue(Double(newValue), row: i, column: j) } 
    } 
} 

あなたが添字演算子を使用しようとすると、しかし、あなたがトラブルに実行されますコンテキストはFloatまたはDoubleのいずれかを許可します。例:あなたがタイプ指定することによって、明確にすることができます

20. let m = Matrix() 
21. let x = m[0, 0] 

error: repl.swift:21:10: error: ambiguous use of 'subscript' 
let x = m[0, 0] 
     ^

repl.swift:9:5: note: found this candidate 
    subscript(_ i: Int, _ j: Int) -> Double { 
    ^

repl.swift:14:5: note: found this candidate 
    subscript(_ i: Int, _ j: Int) -> Float { 
    ^

let x: Float = m[0, 0] 
+0

あまりにも悪いSWIFTのみセッターをサポートしていない、私が恐れていたものだ、それは意味がありません。 – Guig

関連する問題