1.swift允许中自定义运算符:
前置运算符(prefix)
中间运算符(infix)
后置运算符(postfix)
2.自定义运算符仅能包含这些字符:
/ = - + * % < >!& | ^。~
3.例子
import Foundation
//前置运算符
prefix operator !*
//中间运算符
infix operator +++
//后置运算符
postfix operator *!
class JSCoperator {
var name: String?
var idCard: String?
var age: Int = 0
//自定义==
static func == (lhs: JSCoperator, rhs: JSCoperator) -> Bool {
return lhs.idCard == rhs.idCard
}
//前置运算符
static prefix func !* (lhs: JSCoperator) -> Int {
return lhs.age * 2
}
//中间运算符
static func +++ (lhs: JSCoperator, rhs: JSCoperator) -> Int {
return lhs.age + rhs.age
}
//后置运算符
static postfix func *! (rhs: JSCoperator) -> Int {
return rhs.age * 3
}
}
4.0我们也可以让类遵循EquaTable协议,这样就必须实现EquaTable的自定义“==”方法
public protocol Equatable {
/// Returns a Boolean value indicating whether two values are equal.
///
/// Equality is the inverse of inequality. For any values `a` and `b`,
/// `a == b` implies that `a != b` is `false`.
///
/// - Parameters:
/// - lhs: A value to compare.
/// - rhs: Another value to compare.
static func == (lhs: Self, rhs: Self) -> Bool
}
5.0当然我们也可以在类型之外自定义运算符,这样我们就可以作为一个工具类来使用了
import Foundation
//前置运算符
prefix operator !*
//中间运算符
infix operator +++
//后置运算符
postfix operator *!
class JSCoperator {
var name: String?
var idCard: String?
var age: Int = 0
//自定义==
static func == (lhs: JSCoperator, rhs: JSCoperator) -> Bool {
return lhs.idCard == rhs.idCard
}
//前置运算符
static prefix func !* (lhs: JSCoperator) -> Int {
return lhs.age * 2
}
//中间运算符
static func +++ (lhs: JSCoperator, rhs: JSCoperator) -> Int {
return lhs.age + rhs.age
}
//后置运算符
static postfix func *! (rhs: JSCoperator) -> Int {
return rhs.age * 3
}
}
func == (lhs: String, rhs: JSCoperator) -> Bool {
if lhs == rhs.name{
return true
}
return false
}
prefix operator ~=
prefix func ~= (lhs:Int) -> Int {
return lhs * 3
}
postfix operator =~
postfix func =~ (rhs: JSCoperator) -> Int {
return rhs.age * 10
}
最后我们验证一下结果:
let c1 = JSCoperator()
c1.name = "jsc"
c1.idCard = "123456"
let c2 = JSCoperator()
c2.name = "jy"
c2.idCard = "123456"
print(c1 == c2)
c1.age = 5
c2.age = 6
print(!*c1)
print(c1 +++ c2)
print(c1*!)
let str = "jsc"
print(str == c1)
let i = 6
print(~=i)
print(c1=~)
打印结果:
true
10
11
15
true
18
50








网友评论