GeekBand.Swift-下标与操作符

2016/5/10 posted in  iOS学习笔记  

下标

下标是Swift的一种属性访问方式,可以描述为带参数的计算属性

  • 下标可以用于class、struct、enum
  • 只能定义实例下标,不能定义类型下标
  • 可以定义读写下标或只读下标
  • 下标的索引参数可以是任意类型,可以设计多个参数
  • 一个类型可以提供多个下标的重载版本(参数不同)

class Vector{
    var datas = [Int](count:100,repeatedValue:0);
    subscript(index:Int)-> Int{
        get{
            return datas[index]
        }
        set{          
            datas[index]=newValue
        }
    }
}

var datas=Vector()
for i in 0..<10{
   datas[i]=i
}
for i in 0..<10{
    print(datas[i])
}

操作符

Swift的操作符在默认情况下与其他程序语言没什么本质差别

重载操作符

Swift除了标准操作符之外,还可以针对自定义类型重载标准操作符。重载操作符又称为“操作符函数”,本质是一个全局函数。
可以重载前缀,中缀,后缀操作符。前缀和后缀操作符需要加关键词prefix和postfix。
也可以通过将参数设置为inout参数,重载复合赋值操作符,如+=,-=。

class Complex{
    var real=0.0
    var imag=0.0
    
    init(real:Double, imag:Double){
        self.real=real
        self.imag=imag
    }
}

//中缀操作符
func + (left: Complex, right: Complex) -> Complex {
    
    return Complex(real: left.real + right.real,
        imag: left.imag + right.imag)
}

var c1=Complex(real: 10,imag: 20)
var c2=Complex(real: 100,imag: 200)
var c3=c1+c2



//前缀操作符
prefix func - (data: Complex) -> Complex {
    return Complex(real: -data.real, imag: -data.imag)
}


var c4 = -c3

//复合赋值操作符
func += (inout left: Complex, right: Complex) {
    left = left + right
}

c1+=c2

//自定义操作符
prefix operator +++ {}

prefix func +++ (inout data: Complex) -> Complex {
    data += data
    return data
}

相等操作符

  • 引用相等(判断对象地址是否相等,仅针对引用类型,不适用值类型)
    • 相等 ===
    • 不等 !==
  • 值相等(判断实例值是否相等,自定义类型需要重载提供值比较语义)
    • 相等 ==
    • 不等 !=
//值相等操作符
func == (left: Complex, right: Complex) -> Bool {
    return (left.real == right.real) && (left.imag == right.imag)
}
func != (left: Complex, right: Complex) -> Bool {
    return !(left == right)
}


var c5=c3

print(c1==c5) //值相等
print(c2==c5) //值不等
print(c1===c5) //引用不等
print(c3===c5) //引用相等
print(c3==c5)