연산자가 피연산자 앞에 위치하는 연산자
ex) !A
prefix operator **
ex) 전위 연산자의 구현과 사용
prefix operator **
prefix func ** (value: Int) -> Int{
return value * value
}
let minusFive: Int = -5
let sqrtMinusFive: Int = **minusFive
print(sqrtMinusFive) // 25
ex) 전위 연산자 함수 중복 정의와 사용
prefix func ! (value: String) -> Bool{
return value.isEmpty
}
var stringValue: String = "tomato"
var isEmptyString: Bool = !stringValue
print(isEmptyString) // false
stringValue = ""
isEmptyString = !stringValue
print(isEmptyString) // true
ex) 사용자 정의 전위 연산자 함수 중복 정의와 사용
prefix operator **
prefix func ** (value: String) -> String{
return value + " " + value
}
let resultString: String = **"tomato"
print(resultString) //tomato tomato
피연산자 뒤에 위치하는 연산자
ex) A + B
infix operator ** : MultiplicationPrecedence
// MultiplicationPrecedence를 명시해주지 않는다면 DefaultPrecedence 그룹으로 자동 지정된다.
ex)전위 연산자의 구현과 사용
import Foundation
// String 타입의 contains(_:) 메서드를 사용하기 위해 Foundation 프레임워크를 임포트
infix operator ** : MultiplicationPrecedence
func ** (lhs: String, rhs: String) -> Bool {
return lhs.contains(rhs)
}// lhs.contains(rhs): lhs 문자열에 rhs 문자열이 포함되어 있다면 true 반환
let helloPark: String = "Hello park"
let park: String = "park"
let isContainsPark: Bool = helloPark ** park //ture
ex) 클래스 및 구조체의 비교 연산자 구현
class Car{
var modelYear: Int?
var modelName: String?
}
struct SmartPhone{
var company: String?
var model: String?
}
func == (lhs: Car, rhs: Car) -> Bool{
return lhs.modelName == rhs.modelName
}
func == (lhs: SmartPhone, rhs: SmartPhone) -> Bool{
return lhs.model == rhs.model
}
let myCar = Car()
myCar.modelName = "S"
let yourCar = Car()
yourCar.modelName = "S"
var myPhone = SmartPhone()
myPhone.model = "SE"
var yourPhone = SmartPhone()
yourPhone.model = "6"
print(myCar == yourCar)
print(myPhone == yourPhone)
ex) 타입 메서드로 구현된 사용자 정의 비교 연산자
class Car{
var modelYear: Int?
var modelName: String?
static func == (lhs: Car, rhs: Car) -> Bool{
return lhs.modelName == rhs.modelName
}
}
struct SmartPhone{
var company: String?
var model: String?
static func == (lhs: SmartPhone, rhs: SmartPhone) -> Bool{
return lhs.model == rhs.model
}
}
피연산자 뒤에 위치하는 연산자
ex) 0!
postfix operator **
ex) 사용자 정의 후위 연산자 정의와 함수 구현
postfix operator **
postfix func ** (value: Int) -> Int{
retrun value + 10
}
let five: Int = 5
let fivePlusTen: Int = five**
print(fivePlusTen)//15
ex) 전위 연산자와 후위 연산자의 동시 사용
//하나의 피연산자에 전위 연산과 후위 연산을 한 줄에 사용하게 되면 후위 연산을 먼저 수행한다.
prefix operator **
postfix operator **
prefix func ** (value: Int) -> Int{
return value * value
}
postfix func ** (value: Int) -> Int{
return value + 10
}
let five: Int = 5
let sqrtFivePlusTen: Int = **five**
print(sqrtFivePlusTen) // 225 = (5 + 10) * (5 + 10)