본문 바로가기

IT/Swift

[swift] Operator, Flow Control

[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