Hyeyeon blog

[iOS] Swift5 기본 문법 정리 본문

개발/iOS

[iOS] Swift5 기본 문법 정리

Hyeyeon.P 2022. 6. 30. 21:04
반응형

순서


1. 변수 선언자

1) var: 지정된 값을 변경할 수 있는 가변 변수

2) let: 지정된 값을 변경할 수 없는 불변 변수

// var로 지정된 변수는 값 변경이 가능합니다.
var name = "James"
name = "John"

// let으로 지정된 변수는 값 변경이 불가합니다.
let name = "James"
name = "John"
------------------------------------------------------
Cannot assing to value: 'name' is a 'let' constrant

2. 조건문

1) if 조건문

if, else if, else로 케이스를 구문한 조건문입니다.

if 조건1 { }
else if 조건2 { }
else if 조건3 { }
else { /* 위 조건들에 해당되지 않는 경우에 해당 */ }

2) switch 조건문

변수 지정하고 변수의 조건에따라 나뉘는 조건문입니다.

switch 변수 {
	case 조건1: .. 
    case 조건2: ..
    default: .. // 위 조건들에 해당되지 않는 경우에 해당 
}

3. 반복문

1) for-in 반복문

시작 숫자와 종료 숫자로 반복 조건을 명시한 반복문입니다.

// 기본 형태 
for 변수명 in 시작 숫자 ... 종료 숫자 { 
	// 명시한 변수 코드 블록에서 사용 
    // 시작 숫자 ~ 종료 숫자 포함되어 반환 
}
// 예제1
for num in 1...5 {
	print("count : \(num)")
}
----------------------
1 2 3 4 5

// 예제2
var arr = [1, 2, 3, 4, 5]
for num in arr {
	// arr의 값을 하나씩 가져와서 num으로 표시합니다. 
	print(num)
}
----------------------
1 2 3 4 5

2) while 반복문

조건문을 확인하여 조건이 true면 코드를 실행합니다. 조건이 false면 더이상 해당 코드를 실행하지 않습니다.

// 기본 형태 
while 조건문 {
	// 반복 구문 
}
// 예제 
var cnt = 5
while cnt < 10 {
	print(cnt)
	cnt += 1 // 조건의 기준이되는 값을 변화시키지 않으면 무한루프가 됩니다. 
}
-------------------
5 6 7 8 9

3) repeat while문

먼저 코드를 실행한 후 조건을 확인합니다. Java의 do-while과 유사합니다.

// 기본 형태 
repeat {
	// 실행 구문
}
while 조건문
// 예제 
var cnt = 5
repeat {
	print(cnt)
    cnt += 1
}
while cnt < 10 // 가장 먼저 이 조건에 해당하는지 확인한 후 반복문이 시작됩니다. 
---------------------
5 6 7 8 9

4. 배열과 딕셔너리

1) 배열

순서를 가진 집합이며 숫자 인덱스를 사용합니다. 

// 1. 배열은 아래와 같이 만들 수 있습니다. 
var arr: [String] = ["Apple", "Banana", "Orange"]
var arr: Array<String> = ["Apple", "Banana", "Orange"]

// 변수의 형식은 생략이 가능합니다.
var arr = ["Apple", "Banana", "Orange"]

// 값 없이 초기화할 경우, 변수 형식을 명시해야 합니다.
var arr: [String] = []
var arr: Array<String> = []

// 2. 배열의 크기는 .count를 사용합니다.
let size = arr.count

// 3. 배열을 for로 반복하려면 아래와 같이 나타냅니다.
for fruit in arr {
	print(fruit)
}
--------------------------------------------------------
Apple
Banana
Orange

2) 2차원 배열

변수 형식은 [[자료형]] 혹은 Array<Array<자료형>>으로 나타냅니다. 

// 2차원 배열의 모양은 아래와 같습니다.
var arr: [[String]] = [["Apple", "Banana", "Orange"],
["Blueberry", "Kiwi", "Peach"]]

var arr: Array<Array<String>> = [["Apple", "Banana", "Orange"],
["Blueberry", "Kiwi", "Peach"]]

// .count 시, 배열의 행 갯수를 반환합니다.
let size = arr.count 
result --> 2

// 배열의 열 갯수는 행을 선택하여 .count를 적용합니다.
let colSize = arr[0].count
result --> 3

3) 딕셔너리

숫자 이외의 값을 인덱스로 사용하며 순서를 보장하지 않습니다. 
변수 형식은 [key 타입: value 타입]으로 나타냅니다. 

// 1. 딕셔너리는 아래와 같이 나타냅니다.
var fruits: [String: String] = [
	"Apple": "Red",
    "Banana": "Yellow",
    "Kiwi": "Green"
]

// 빈 값으로 초기화는 방법은 아래와 같습니다.
var temp : [String:String] = [String:String]()

// 2. 딕셔너리의 값은 아래와 같이 가져올 수 있습니다.
var color = fruits["Apple"]
print(color)
-------------------------------------------------------
// 값이 있을수도, 없을수도 있기 때문에 Optional로 반환됩니다.
Optional("Red")

// !를 사용하여 값이 있음을 확실히하면 String으로 반환됩니다.
var color = fruits["Apple"]!
print(color)
-------------------------------------------------------
Red

// 3. 딕셔너리에 데이터 추가는 아래와 같습니다.
// 만일 이미 value가 있는 경우, 새로운 value로 교체됩니다.
fruits["Peach"] = "Pink"

// 4. 딕셔너리의 데이터 삭제는 value에 nil을 입력합니다.
fruits["Kiwi"] = nil

print(fruits)
-------------------------------------------------------
["Peach": "Pink", "Apple": "Red", "Banana": "Yellow"]

// 5. 딕셔너리를 for로 반복하려면 아래와 같이 적용합니다.
for (key, value) in fruits {
	if key == "Apple" {
    	print(value)
    }
}
-------------------------------------------------------
Red

5. 함수

코드를 재사용하여 깔끔한 코드를 작성하기위해 사용합니다.

1) 반환 값이 없는 함수 형태

fun 함수명() {
	..
}

2) 반환 값이 있는 함수 형태

fun 함수명() -> 반환값 타입 {
	..
	return 반환값
}

3) 값을 입력받는 함수 형태

fun 함수명(변수명1: 변수타입1, 변수명2: 변수타입2, ..) {
	.. 
    // 입력받은 변수명1, 변수명2, .. 를 사용하여 코드를 작성합니다.
}

4) 활용

// 1. 반환 값이 없는 함수 형태
fun printHello() {
	print("Hello!")
}

// 2. 반환 값이 있는 함수 형태
fun getName() -> String {
	return "John doe"
}

// 3. 값을 입력받는 함수 형태
fun getName(firstName: String, lastName: String) -> String {
	return firstName + lastName
}

6. 클래스

1) 클래스의 기본 형태

클래스 내부에 변수와 함수를 생성할 수 있습니다.

class Person {
	// 클래스 내부에 변수를 생성할 수 있습니다.
	var name = ""
    var koreanAge = 0
    
    // init 함수는 반드시 실행되는 초기화 함수입니다.
   	init(name : String, age: Int){
    	// 파라미터와 변수의 이름이 같은 경우, self를 사용하여 Person 클래스의 name임을 명시한다.
        self.name = name
        koreanAge = age + 1
    }
    
    // 클래스 내부에 함수를 생성할 수 있습니다.
    func printInfo(){
    	print("name: \(t.name), age: \(t.age)" )
    }
}

2) 클래스의 생성 및 변수, 함수 호출

클래스를 생성한 후 클래스 내부의 변수와 함수를 호출합니다.

var p = Person(name: "John Doe", age: 17)
print(p.name) 
p.printInfo()
----------------------
John Doe
name: ttt, age: 17

3) 클래스의 상속

클래스를 상속하여 중복 코드를 줄입니다.

class John : Person {
    // 상속한 Person 클래스의 내용이 자동으로 포함됩니다.
}

var j = John(name: "John", age: 20)
print("name: \(j.name), age: \(j.koreanAge)" )
-------------------------
name: John, age: 20

7. 클로저와 클로저 표현식

스위프트에서는 함수를 변수처럼 사용할 수 있습니다.

이와같은 독립적인 코드블록을 클로저 표현식이라 합니다.

let showHello = { print("Hello!") }
showHello()

아래와 같이 매개변수를 받아 결과를 반환하도록 구성도 가능합니다.

let append = {(str1 : String, str2: String) -> String in
    return str1 + str2
}
let result = append("Hello", "World")

클로저란, 함수나 클로저 표현식 같은 독립적인 코드블록과 코드블록 주변의 변수가 결합된 것을 뜻합니다.

아래의 코드에서 functionB는 코드블록 밖에 선언된 counter 변수를 사용하여 클로저로 간주된다.

func functionA() -> () -> Int {
   var counter = 0
   func functionB() -> Int {
      return counter + 10
   }
   return functionB
}

let mClosure = functionA()
let result = mClosure()
728x90
Comments