Col*_*ral 19 operator-overloading subscript-operator swift
我是初学者,对Swift
操作员没有先进的知识.
我有以下课程
class Container {
var list: [Any] = [];
}
Run Code Online (Sandbox Code Playgroud)
我想实现运算符subscript []
以便从中访问数据list
.
我需要这样的东西:
var data: Container = Container()
var value = data[5]
// also
data[5] = 5
Run Code Online (Sandbox Code Playgroud)
我也希望能够写出这样的东西:
data[1][2]
Run Code Online (Sandbox Code Playgroud)
是否可以考虑1
来自的元素Container
是array
?
Thanx寻求帮助.
Luc*_*tti 33
看起来这里有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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以这样使用它.
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"
Run Code Online (Sandbox Code Playgroud)
Container
支持下标的一个元素data[1][2]
吗?如果我们使用你的例子,你就不能.因为data[1]
返回类型的东西Any
.你不能下标Any
.
但是如果你添加一个演员阵容就有可能
var container = Container()
container[0] = ["Enterprise", "Defiant", "Voyager"]
(container[0] as! [String])[2] // > "Voyager"
Run Code Online (Sandbox Code Playgroud)
解决方法是利用多个参数 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]
Run Code Online (Sandbox Code Playgroud)