[swift 기초문법] - 연산자(Operator), 흐름제어(Flow Control)
나머지 연산자 (truncatingRemainder)
기존의 프로그래밍 언어에서는 나머지 연산자가 정수형에만 해당되는 경우가 많았는데 swift에서는 부동소수점 타입도 나머지 연산이 가능합니다.
하지만 %연산자는 swift도 정수형만 지원하기 때문에 소수점까지 포함하고 싶으면 아래 메서드를 이용하시면 됩니다.
double형에 %연산자를 사용하면 오류가 납니다.
func truncatingRemainder(dividingBy:)
let x = 8.625
print(x / 0.75)
// Prints "11.5"
let q = (x / 0.75).rounded(.towardZero)
// q == 11.0
let r = x.truncatingRemainder(dividingBy: 0.75)
// r == 0.375
let x1 = 0.75 * q + r
// x1 == 8.625
비교 연산자
A===B : A와 B가 레퍼런스 타입일 때 같은 인스턴스를 가리키고 있는지 비교하여 불리언 값을 반환
A!==B : A와 B가 레퍼런스 타입일 때 같이 않은 인스턴스를 가리키고 있는지 비교하여 불리언 값을 반환
A~=B : A와 B의 패턴이 매치되는지 확인하여 불리언 값을 반환
범위연산자
A...B : A부터 B까지의 수를 묶어서 범위를 표현, A B 포함
A..<B : A부터 B 미만까지의 수를 묶어 표현, A 포함 B 미포함
오버플로 연산자
기존 언어들은 오버플로 또는 언더플로에 대해 추가적인 로직을 설계하는 것이 일반적이지만 스위프트는 오버플로를 자동으로 처리하는 연산자가 있다.
&+ : 오버플로 더하기 연산
&- : 오버플로 빼기 연산
&* : 오버플로 곱하기 연산
var unsignedmin : UInt8 = 0
let underflow_error : UInt8 = unsignedmin - 1 //runtime error
let underflow_protect : UInt8 = unsignedmin &- 1 //255
var unsignedmax : UInt8 = 255
let overflow_error : UInt8 = unsignedmax - 1 //runtime error
let overflow_protect : UInt8 = unsignedmax &+ 1 //0
기타 연산자
A ?? B : A가 nil이 아니면 A 반환 nil 이면 B 반환
-A : 부호 변경
O! : 옵셔널 강제 추출
V? : 옵셔널 연산자
연산자 우선순위와 결합 방향(Precedence, Associativity)
아래 문서에는 연산자들의 우선순위, 결합 방향 그룹을 표시해주고 있음
스위프트 우선순위는 상대적이다
https://developer.apple.com/documentation/swift/operator_declarations
사용자 정의 연산자
infix : 중위 연산자
prefix : 전위 연산자
postfix : 후위 연산자
.사용하고 싶으면 무조건 맨 앞에
기존에 쓰던 방식은 불가능 ex) !,?<,& ...
prefix operator ^^
prefix func ^^ (value: Int) -> Int{
return value + value
}
prefix func ^^ (value: String) -> String{
return value + " x " + value
}
let num = 3
let result = ^^3 //6
let string = "hi"
let stringResult = ^^string // hi x hi
중위 연산자는 우선순위 그룹을 정의할 수 있습니다.
if문
소괄호 () 생략 가능합니다.
조건이 꼭 Bool 타입 이어야 합니다.
swich문
() 생략 가능합니다.
break 필수가 아닙니다.
연속 실행하려면 fallthrough 사용합니다.
정수 외 다른 타입도 비교 가능 , 범위 연산자, where 절, 와일드카드(_), 열거형이 가능합니다.
for문
괄호 생략이 가능합니다.
for-in 구문으로 c언어 스타일 사라졌습니다.
while문
조건은 Bool이어야 합니다.
do-while 구문이 repeat-while 구문으로 변경됬다고 보시면 됩니다.
구문이름표
반복문 시작할 때 앞에 '이름:' 붙입니다.
var numArray: [Int] = [3,4,6,7,8,90,678,1,2,0]
LoopCustomName: for num in numArray {
print("LoopCustomName", num)
if num > 4 || num < 1 {
continue LoopCustomName
}
var count: Int = 0
AddWhile: while true {
print(num)
count += 1
if count == num {
break AddWhile
}
}
removeLoop: while true {
if numArray.first != num {
print("end removeLoop",num)
break LoopCustomName
}
print("removeFirst",num)
numArray.removeFirst()
}
}
#swift 기초
#swift 강의
#ios programming
'IT > Swift' 카테고리의 다른 글
[swift] Closure, Capture list (0) | 2018.04.02 |
---|---|
[swift] Mutating, Memberwise Initializers, Access Control (0) | 2018.03.13 |
[swift] Property (0) | 2018.03.12 |
[swift] Optional, Optional Chaining (0) | 2018.03.08 |
[swift] Method, Struct, Class (0) | 2018.03.07 |