본문 바로가기

Swift

(34)
098 ~ 103. Enumeration (열거형) Enumeration Types (열거형) 연관된 상수들을 하나의 그룹으로 묶은 자료형을 열거형이라고 한다. 이때 열거형에 포함되게 된 상수들은 상수라고 표현하지 않고 Enumeration Case혹은 줄여서 case라고 부른다. 열거형과 열거형에 포함된 케이스는 독립적인 이름을 가진다. 열거형은 코드의 가독성과 안정성을 증가하기 위해 사용한다. 워드 프로세서를 만든다고 가정했을 때 문단 정렬을 위해 다음과 같이 선언한다. 왼쪽 정렬은 0, 가운데 정렬은 1, 오른쪽 정렬은 2이다. let left = 0 let center = 1 let right = 2 var alignment = center1 결과 1 가운데 정렬을 선택했을 때 동작은 정상적으로 가능하지만 결과인 1이 정확히 무엇을 정의하는지 알기..
087 ~ 097. Collections (콜렉션) Collection (컬렉션) Swift는 세 가지의 컬렉션을 제공한다. Array (배열) 데이터를 순서대로 저장한다. Dictionary (딕셔너리) key와 value를 하나의 쌍으로 저장한다. Set (셋/집합) 집합 연산을 수행하는 컬렉션. Foundation Collection과 Swift Collection Swift의 컬렉션 은은 다시 두 가지로 구분되는데, 기존부터 사용되던 Class로 구현된 Foundation Collection과 구조체로 구현된 Swift Collection이다. 일반적으로 말하는 컬렉션은 Swift Collection을 의미한다. 따라서 Swift Collection의 사용 빈도가 많고, 값 형식이 아닌 참조 형식을 사용하고 싶을 때 Foundation Collec..
071 ~ 086. Strings and Character (문자열과 캐릭터) Strings and Character let s = "string" print(type(of: s)) 결과 String let c = "c" print(type(of: c)) 결과 String 자동 지정 방식의 경우 큰 따옴표 사이의 문자 수와는 상관없이 항상 문자열로 판단한다. 따라서 형식지정 방식을 사용해야 character를 저장할 수 있다. let c: Character = "c" print(type(of: c)) 결과 Character 빈 문자열과 빈 문자를 저장하는 방법도 서로 상이하다. let emptyC: Character = " " var emptyS = " " print(emptyS.count) emptyS = "" print(emptyS.count) 결과 1 0 문자는 공백으로 분 ..
067 ~ 070. Tuples (튜플) Tuples Syntax (expr1, expr2, ...) let i = 12, 34 결과 //error int는 스칼렛 타입이기 때문에 여러개의 값을 저장 할 수 없다. int를 제외한 다른 대부분의 타입도 스칼렛 타입이므로 하나의 값을 저장 할 수 있다. let i - (13, 34) print(i) 결과 (12, 34) 괄호를 사용하면 이 때무터 튜플을 사용하며, 두 개 이상의 값을 저장 할 수 있다. 튜플은 컴파운드 타입이다. let data = ("", 200, "OK", 12.34) print(type(of: data)) 결과 (String, Int, String, Double) 튜플 안에 저장 된 멤버에 따라 여러 자료형을 저장 할 수 있다. 튜플 안의 멤버의 수와 자료형은 튜플이 생성됨과..
061 ~ 066. Closure (클로저) Closure Swift에서 closure는 두 가지로 구분 되고, 해당 되는 것은 세 가지 이다. Named Closure Function, Nested Function Unnamed Closure Anonymous Function 함수와 마찬가지로 클로저 또한 First Class Citizen이다. 클로저와 함수는 선언 방식이 동일하며, 그런 만큼 서로 호환 가능하다. Syntax { (parameters) -> ReturnTypein statement } { statements } parameter에서 returntype까지를 closure head 라고 말 한다. in 이후를 closure body라 말 한다. 클로저가 극단적으로 짧아지게 되면 brace와 statement만 남게 되는 경우가 ..
049 ~ 060. Functions (함수) Functions 특정한 기능을 수행하는 코드 조각이다. 코드의 재사용이 가능해 지기 때문에 유지보수에 유리해진다. Calling Functions (함수 호출) Syntax functionName(parameters) print("hello") 결과 hello Defining Functins (함수 정의) Syntax func name(parameters) -> ReturnType { statements } func printHello() { print("hello") } printHello() 결과 hello Return Values (반환) Syntax func name(parameters) -> ReturnType { statements return expression } func add() ->..
043 ~ 048. Optionals Optionals let num: Int print(num) 결과 //error 변수와 상수는 사용하기 전 반드시 초기화해야 한다. 하지만 초깃값을 비워야 하는 경우 해결책으로 0을 비었다고 사용한다. 특정 문자열을 비었다고 사용한다. 을 사용하는 경우 각각 0을 다른 방법으로 사용 할 수 없다. 자료형을 항상 문자열로 고정 할 수는 없다. Syntax TypeName? let optionalNum: Int? = nil print(num) 결과 nil nil은 c나 기타 언어의 null과 같은 역할을 한다. Optional은 '값이 비어있음'을 표현할 수 있는 자료형이다. Unwrapping var num: Int? = nil print(num) num = 123 print(num) 결과 nil Opti..
039 ~ 042. Control Transfer Statements, Labeled Statement (흐름 제어 문) Control Transfer Statements fallthrough, throw, return, break, continue가 해당되며, 이전에 설명했던 fallthrough를 제외한 break, continue를 일단 정리하고, throw와 return은 함수에서 다시 정리한다. Transfer Control 제어 전달은 현재 실행중인 scope에서 코드를 중지하고 다음에 실행할 코드를 실행하는 것을 말한다. break Statement switch문과 반복문 두루 사용 가능하다. 현재 실행중인 문장을 중지하고 다음 문장을 진행한다. switch문에서 사용할 경우 let num = 1 switch num { case 1...10: print("begin") if num % 2 != 0 { //num..
037 ~ 038. Loop Statements (반복문) For-In Loops Syntax for loopConstant in Range { statements } for loopConstant in Collection { statements } loopConstant는 바꿀 수 없다. Range만큼 Statements를 반복한다. for index in 1 ... 3 { print("hello") } 결과 hello hello hello index는 선언이후 사용하지 않았기 때문에 warning이 표시된다. 이런 경우 index를 '_'로 대체하여 사용할 수 있는데 이를 wildcard pattern이라고 한다. 변형 for _ in 1 ... 3 { print("hello") } wildcard pattern은 위와 같이 변형해서 사용할 수 있다 let ..
032 ~ 036. Conditional Statements (조건문) if Statement (if 문) Statement if condition { statements } let id = "root" let password = "1234qwer" //id 확인 if id == "root" { print("valid id") } //password 확인 if password == "1234qwer" { print("valid password") } 결과 valid id valid password 두 가지의 조건문을 논리 연산을 통해 하나로 묶을 수도 있다. let id = "root" let password = "1234qwer" if id == "root" && password == "1234qwer" { ("login success") } 결과 login success..