基本数据类型可以加减乘除运算,那结构体、枚举、类行不行?此时就需要重载运算符
第一种 重载方法:在全局区定义重载函数
struct Point{
var x, y = 0
}
// 第一种 重载方法:在全局区定义重载函数
func + (p1: Point, p2: Point) -> Point {
Point(x: p1.x + p2.x, y: p1.y + p2.y)
}
// 使用
var p1 = Point(x: 10, y: 20)
var p2 = Point(x: 12, y: 23)
let p3 = p1 + p2
第二种 重载方法:将重载方法写在结构体内
struct Point{
var x, y = 0
// 定义重载函数, 要类方法static
static func + (p1: Point, p2: Point) -> Point {
Point(x: p1.x + p2.x, y: p1.y + p2.y)
}
}
// 使用
var p1 = Point(x: 10, y: 20)
var p2 = Point(x: 12, y: 23)
let p3 = p1 + p2
前缀、后缀方法重载 ++
struct Point{
var x, y = 0
// 定义重载函数, 要类方法static
static func + (p1: Point, p2: Point) -> Point {
Point(x: p1.x + p2.x, y: p1.y + p2.y)
}
static func += (p1: inout Point, p2: Point) -> Point {
p1 = p1 + p2
}
static prefix func ++ (p: inout Point) -> Point {
p += Point(x: 1, y: 1)
return p
}
static postfix func ++ (p: inout Point) -> Point {
let tmp = p
p += Point(x: 1, y: 1)
return tmp
}
}