
Swift 기본 타입
- Int
- Double
- Boolean
- String
- Tuple
// Int 1 // Double 1.0 // Boolean true false // String "Swift Coding Tutorials" // Tuple (1, "튜플")
콘솔출력
print("출력하기")
상수와 변수
// 상수 let name = "코딩튜터" // 변수 var count = 3
상수는 한번 값을 설정하면 변경할 수 없습니다. 변수는 이름처럼 여러번 설정해서 값 변경이 가능합니다.
연산자
1 + 1 1 - 1 1 * 2 1 / 3.0
위와 같이 사칙연산을 할 수 있습니다.

다만 나눗셈할때 결과가 실수로 예상되는 연산에는 3.0 과 같이 Double 타입으로 연산을 해야 정확한 결과값을 얻을 수 있습니다.
비교
let num = 1 num == 1 // 같다 num != 2 // 같지 않다 num > 0 // 0 보다 크다 num < 2 // 2 보다 작다 num >= 0 // 0 보다 크거나 같다 num <= 2 // 2 보다 작거나 같다
Optional
프로그램의 안정성을 위해서 오류를 발생시키시는 대신에 nil 을 발생시키는 것을 옵셔널(Optional) 이라고 합니다. 일반 자료형 타입은 nil 을 반환할 수 없습니다. 옵셔널은 nil 또는 값을 가질 수 있습니다.
* nil 은 다른프로그래밍 언어에서 NULL 로 불립니다.
var value: Int print( value ) // 에러발생 & 프로그램 중단!!! print( "다음작업" )
값을 할당하지 않고 변수를 호출하면 에러가 발생하고 프로그램이 중단됩니다. 결과적으로 마지막에 "다음작업"은 출력되지 않습니다. 앞서 이야기한대로 프로그래밍에 안정성에 문제가 생길 수 있는 부분입니다.
var opt: Int?
옵셔널은 타입뒤에 ? 를 붙혀서 만들 수 있습니다.
print( opt ) // nil 출력 opt = 3 print( opt ) // Optinoal(3) 출력
값을 할당되지 않은상태에서 호출하면 nil 이 리턴되고 프로그램이 중단되지 않습니다. 다음으로 값을 할당하고 호출하면 Optional(값)과 같은 형태로 리턴됩니다.
opt = nil print(opt ?? 1) // 1 출력 opt = 3 print(opt ?? 1) // 3 출력
?? 연산자를 이용하면 옵셔널을 벗겨내고 값을 리턴하게 됩니다. 2번 줄에 opt 값이 nil 이면 오른쪽 1 을 출력하고 4번 줄에 opt 값이 할당되어 있을때 Optional(3) 에서 옵셔널을 벗겨내고 값 3을 리턴합니다.
print( opt! )
! 를 사용해서 강제로 Optional 을 벗겨낼 수 있지만 값이 할당되지 않은 상태에서 사용하면 에러를 발생시킬 수 있으니 주의해야 합니다.
Boolean 연산
let check = true !check // not check && true // And 연산 check || true // Or 연산
문자열
// 타입 1 var str1 = "문자열" // 타입 2 var str2 = """ 여러줄의 문자열을 다루기 쉽습니다 """
""" 쌍따옴표 3개로 \n \r 과 같은 개행문자 없이도 여러줄의 문자열을 생성할 수 있습니다.
let name = "코딩튜터" let str3 = "이름: \(name)" // 변수 삽입
\( ) 형식 안에 변수를 삽입해서 문자열을 생성할 수 있습니다.
var str = "123456789" print( str.prefix(3) ) // 앞에서 3개, 123 출력 print( str.suffix(3) ) // 뒤에서 3개, 789 출력 let start = str.index( str.startIndex, offsetBy: 3 // 앞에서 3개 건너뛰고 ) let end = str.index( str.endIndex, offsetBy: -3 // 뒤에서 3번 까지 ) print( str[start...end] ) // 4567 출력
다른 프로그래밍 언어와 비교해서 문자열 자르기는 간단해 보이지 않습니다.
배열
var names = ["Apple", "Banana"]
간단하게 대괄호 [ , ] 를 사용해서 배열을 생성할 수 있습니다.
name[1] // Banana
배열의 1번 에 위치한 값을 리턴합니다. 배열에서 인덱스는 0부터 시작이기 때문에 1번이 두번째 요소를 가리킵니다.
names.append("kiwi") names.insert("mango", at: 0)
append 와 insert 를 사용해서 배열의 요소를 추가할 수 있습니다. append 는 배열의 마지막에 요소를 추가하고 insert 는 위치를 지정해서 배열에 추가할 수 있습니다.
names.removeFirst() // 배열의 처음 요소 제거 names.removeFirst(2) // 배열의 처음 요소 2개 제거 names.removeLast() // 배열의 마지막 요소 제거 names.removeLast(2) // 배열의 마지막 요소 2개 제거 names.remove(at: 2) // 배열의 2번 요소 제거 names.removeAll() // 배열의 모든 요소 제거
remove() 함수를 사용해서 배열의 요소를 제거할 수 있습니다.
names.contains("apple") // true 리턴
contains() 함수를 사용해서 배열에 요소가 포함되어 있는지 확인할 수 있습니다.
Set
var names = Set( ["apple", "banana"] ) names.insert("kiwi") // 추가 names.remove("banana") // 제거 names.contains("apple") // "apple" 이 포함되어 있는지 확인
Set 은 중복을 허용하지 않는 배열입니다. 배열과 유사한 방식으로 사용할 수 있습니다.
Dictionary
var dic = [ "apple": 3, "banana": 2 ]
Dictionary 는 키값을 갖는 배열입니다.
// 값 출력 print( dic["apple"] ) // 3 // 값 변경 dic["banana"] = 5 // 삭제 dic["kiwi"] = nil
조건문
조건문 - if
let condition = true let condition2 = true if condition { ... } if condition { ... } else if condition2 { ... } else { ... }
옵셔널 언래핑
var name: String? = "코딩튜터" if let name = name { ... }
if 문 내부에서 name 은 Optional("코딩튜터") 가 아닌 "코딩튜터" 를 리턴하게 됩니다.
조건문 - for
let numbers = [1,2,3,4,5] for value in numbers { ... } for value in 0..<5 { // 0 부터 4 까지, 0, 1, 2, 3, 4 ... } for value in numbers[...2] { // 뒤에 2개 빼고, 1, 2, 3 ... } for value in numbers[2...] { // 앞에서 2개 빼고, 3, 4, 5 ... }
위에서 numbers[...2] 처럼 배열을 간단히 자를 수 있습니다. 이전에 문자열 자르기에서 복잡한 코드로 문자열을 배열로 만들었는데 number[...2] 를 조금 응용하면 좀더 간단하게 자르기를 구현할 수 있습니다.
// 문자열 -> 배열 var numbers = Array("12345") // 배열 자르기, Int 배열 -> String 배열, 배열 -> 문자열 var str = numbers[2...2].map({String($0)}).joined() // 결과 출력 print( str ) // 3
중간에 map({ }) 함수는 클로저로 반복문을 대신한 함수식입니다.
조건문 - while
var job = true while job { ... job = false }
while 조건문을 반복하다기 작업을 마치고 싶을때 job = false 를 통해서 반복문을 빠져나오게 할 수 있습니다.
조건문 - switch
var value = 2 switch value { case 1: print("1") case 2: print("2") default: break }
Swift 에서 switch 는 기능이 다양합니다. Int 뿐만아니라 String, 튜플 까지 사용할 수 있고 값의 범위를 지정할 수도 있습니다.
문자열 사용하기
var value = "a" switch value { case "a": print(value) case "b", "c", "d": // 범위지정 타입 1 print(value) case "e"..."z": // 범위지정 타입 2 print(value) default: break }
튜플 사용하기
let tuple = (0, 100) switch tuple { case (0, 100): print(tuple) case (50, 50): print(tuple) case (_, 200): // 첫 요소값 상관없이 두번째 요소 값이 200 이면 해당 print(tuple) case let(x, y) where y > 300: // 범위지정 print(tuple) default: break }
함수
// 함수 선언 func work() { ... } // 함수 호출 work()
전달값이 있을때
// 함수 선언 func work(param: String) { ... } // 함수 호출 work(param: "p")
리턴형 함수
// 함수 선언 func work() -> Bool { return true } // 함수 호출 let result: Bool = work()
전달값 + 리턴형
// 함수 선언 func work(param: String) -> Bool { return true } // 함수 호출 let result: Bool = work(param: "p")
전달값 네이밍 생략
// 함수 선언 func work(_ param: String) { ... } // 함수 호출 work("p")
전달값 네이밍 변경
// 함수 선언 func work(name param: String) { print( param ) } // 함수 호출 work(name: "p")
댓글