私はSwift
の初心者で、演算子に関する予備知識がありません。
私は次のクラスを持っています
class Container {
var list: [Any] = [];
}
list
からデータにアクセスするために、演算子subscript []
を実装したいと思います。
私はこのようなものが必要です:
var data: Container = Container()
var value = data[5]
// also
data[5] = 5
また、私はこのようなものを書くことができるようにしたいと思います:
data[1][2]
Container
の要素1
がarray
であると考えることは可能ですか?
助けてくれてありがとう。
ここには2つの質問があるようです。
subscripting
を有効にするにはどうすればよいですか?クラスsubscripting
でContainer
を有効にするには、次のようにsubscript
計算プロパティを実装する必要があります。
class Container {
private var list : [Any] = [] // I made this private
subscript(index:Int) -> Any {
get {
return list[index]
}
set(newElm) {
list.insert(newElm, atIndex: index)
}
}
}
これで、このように使用できます。
var container = Container()
container[0] = "Star Trek"
container[1] = "Star Trek TNG"
container[2] = "Star Trek DS9"
container[3] = "Star Trek VOY"
container[1] // "Star Trek TNG"
data[1][2]
のような何かを書く添え字をサポートするContainer
の1つの要素にアクセスできますか?いいえの例を使用する場合、できません。 data[1]
はタイプAny
の何かを返すからです。また、Any
に添え字を付けることはできません。
しかし、キャストを追加すると可能になります
var container = Container()
container[0] = ["Enterprise", "Defiant", "Voyager"]
(container[0] as! [String])[2] // > "Voyager"
回避策は、subscript
の複数のパラメーターを活用することです。
したがって、data[1][2]
の代わりに、data[1, 2]
と言うことができます。これは場合によっては便利です
struct Container {
subscript(a: Int, b: Int) -> String {
print(a)
print(b)
return "possible"
}
}
let data = Container()
data[1, 2]
下付き文字を探しているようです。次の例のように、独自のタイプの添え字を作成できます。
class Container {
var list = [["Hello", "World"], ["Foo", "Bar"]]
subscript(index: Int) -> [String] {
get {
return list[index]
}
set {
list.insert(newValue, atIndex: index)
}
}
}
上記の例は、Array
を返すことがわかっているため、double [ ]
で機能します。ここで、Array
には例として文字列が含まれていますが、もちろん独自のタイプに交換することもできます
var container = Container()
container[0][0] = "Stack"
container[0][1] = "Overflow"
print(container[0][0]) // "Stack"
print(container[1][1]) // "Bar"
class Container
{
var list: [AnyObject] = ["hello" , "world"];
subscript ( i : Int) -> AnyObject{
get{
return list[i]
}
set{
list[i] = newValue
}
}
}
var c : Container = Container()
println(c[1])
c[1] = "lol"
println(c[1])
オペレーターの詳細については: http://nshipster.com/Swift-operators/