swift에서 사용되는 연산자들중 다른어언들과 차이점을 중심으로 작성하였다.
var arr1: Array<Int> = [0,1,2,3,4,5];
//Index범위를 지정해 subArr를 만들 수 있다.
print(arr1[0...3]); //[0, 1, 2, 3
//인덱스0부터 6미만가지
print(arr1[0..<6]); //[0, 1, 2, 3, 4, 5]
//인덱스0을 시작으로 끝가지
print(arr1[0...]); //[0, 1, 2, 3, 4, 5]
//제일앞부터 3까지
print(arr1[...3]); //[0, 1, 2, 3]
//제일앞부터 3미만까지
print(arr1[..<3]); //[0, 1, 2]
swift의 연산자들은 우선순위와 결합방향을 기준으로 연산을 진행한다.
swift 연산자의 우선순위는 상대적 순위로 결정된다. 연산자 재정의 부분에서 다루겠다.
왼쪽 : ( ( (1 + 2) + 3) + 4)
오른쪽 : (1 + ( 2 + (3 + 4) ) )
토큰 (= -> // /* */ .),
전위연산자 (< & ?)
중위연산자 (?)
후위연산자(> ! ?)
💡 ' . ' 를 포함한 연산자를 정의할 경우 ' . ' 는 반드시 가장처음에 위치해야합니다.
| = - + ! * % < > & \ ^ ? ~
//기존에 없음으로 선언해준다
prefix operator ++;
//함수 형식으로 연산자에 기능을 부여한다. 전위연산자의 대상은 매개변수로 전달된다.
prefix func ++ (value: String) -> String {
return value + " " + value;
}
var testString: String = "I'm iOS";
print(++testString); //I'm iOS I'm iOS
💡 swift에서는 ++, --연산자는 사용되지 않는다.
//기존에 존재하는 연산자는 선언문을 작성하지 않는다.
prefix func ! (value: String) -> Bool {
return value.isEmpty;
}
var original: Bool = false;
print(!original); //true
var newFunction1: String = "Hello";
var newFunction2: String = "";
print(!newFunction1); //false
print(!newFunction2) //true
🙄만약 기존의 기능과 추가된 기능을 중복하면 어떻게 될까?
prefix func ! (value: Bool) -> String {
return "newFunction";
}
var test1: Bool = false;
print(!test1) //error: ambiguous use of operator '!'
위와같이 기존의 기능과 구분이 안되 에러가 발생한다.
postfix operator &*;
postfix func &* (value: Int) -> Int {
return value * 100;
}
var test: Int = 5;
print( test&* ) //500
중위 연산자는 위의 두개의 연산자와 달리 우선순위를 명시할 수 있다.
precedence 새로운우선수위그룹이름 {
higherThan: 더낮은우선수위그룹
lowerThan: 더높은우선수위그룹
associativity: 결합방향(left/right/none)
assignment: 할당방향 사용(옵셔널 체이닝에서 다룸)
}
💡 중의 연산자는 구현 함수에 func를 쓰지 않는다.
💡 결합방향이 none이면 연속으로 사용할 수 없다
precedencegroup myPrecedence {
associativity: left
}
//우선순위를 부여하지 않으면 DefaultPrecedece가 자동부여된다
infix operator &&& : myPrecedence;
//중위연산자 구현 함수에는 func를 쓰지 않는다.
func &&& (first: String, second: String) -> String {
first + " | " + second
}
let result = "1"&&&"2"&&&"3"&&&"4"&&&"5"&&&"6";
print(result);//1 | 2 | 3 | 4 | 5 | 6