Part 1. 개발에 필요한 기초 문법
Ch 3. 코드로 구조 잡기
01. 구조체 - 하나의 동작을 하는 객체 만들기
struct 구조체이름 {
프로퍼티
메서드
}
Swift
복사
02. 클래스 - 주소값으로 객체를 만들기
class 클래스이름 {
프로퍼티
메서드
}
Swift
복사
03. ObservableObject
ObservableObject - 관찰이 가능한 객체
04. 열거형 Enum - 필요한 선택지를 만드는 방법
•
선택지를 만들어 주는 것
enum Direction {
case north
case east
case west
case south
}
Swift
복사
struct Choice: View {
var direction: Direction = .north
var member: String = "HJ"
var body: some View {
Text("방향은 \(direction.rawValue)쪽 입니다.")
}
}
enum Direction: String {
case north = "북"
case east = "동"
case west = "서"
case south = "남"
}
Swift
복사
05. 스위치 - 선택지를 사용해서, 케이스 별로 정리하는 방법
var direction: Direction = .north
switch direction {
case north:
case east:
case west:
case south:
default:
}
Swift
복사
06. 옵셔널 - 있을 수 있는 것과 없는 것
•
있을 수도 있고 없을 수도 있는 값
•
타입 뒤에 ? 를 붙여서 만든다.
07. 옵셔널바인딩, 체이닝 - 옵셔널 값을 안전하게 사용하기
옵셔널은 안전함을 추구
•
없음을 표현하고 싶은게 아니라 사실 안전함을 추구
•
어떤 값에 접근하려 했을 때 없다면? → 크래쉬
◦
그러면 어떻게 사용해야 안전?
◦
옵셔널 바인딩, 옵셔널 체이닝
•
옵셔널 바인딩
◦
옵셔널 안의 값을 꺼내는 작업
◦
옵셔널 안에 값이 있는지 없는지 확인
◦
만약 옵셔널 안에 값이 있다면 사용
if let name = petName {
print(name)
}
Swift
복사
•
옵셔널 체이닝
◦
바인딩을 여러번 해야함
if let hj = hj {
if let mbti = hj.mbti {
if let name = mbti.name {
}
}
}
if let hjMbtiName = hj?.mbti?.name {
} else {
}
Swift
복사
Ch 4. 문법 활용해서 코딩하기
01. 예외처리 - 만약 에러가 발생한다면
예외처리
do { // 시험 삼아 해 볼 do
try code // 에외가 일어날 수 있는 코드
} catch { // 에러 던지기
catch error // 에러 받기
}
Swift
복사
•
예외처리 어떻게 해줘야 할까?
◦
사고는 한번만 터져도 사고
▪
미리 예외처리 필수
// 가장 Simple
if inputNumber != 0 {
totalNumber / inputNumber
}
// throw 사용
if inputNumber != 0 {
throw totalNumber / inputNumber
}
// do-catch 구문
do {
try devideByInputNumber(input)
} catch {
print(error)
}
Swift
복사
예제
import SwiftUI
struct Exception: View {
@State var inputNumber = ""
@State var resultNumber: Float = 0
var body: some View {
VStack {
TextField("나눌 숫자를 입력해주세요.", text: $inputNumber)
Text("나눈 결과는 다음과 같아요 \(resultNumber)")
Button {
do {
try resultNumber = divideTen(with: Float(inputNumber) ?? 1.0)
} catch DivideError.dividedByZero {
print("0으로 나누었대요.")
resultNumber = -1
} catch {
print(error.localizedDescription)
}
} label: {
Text("나누기")
}
}
}
func divideTen(with inputNumber: Float) throws -> Float {
var result: Float = 0
if inputNumber == 0 {
// error
throw DivideError.dividedByZero
} else {
result = 10 / inputNumber
}
return result
}
}
enum DivideError: Error {
case dividedByZero
}
Swift
복사
02. 프로토콜 - 설계하고 설계대로 만드는 방법
Protocol
•
지켜야 하는 규칙
protocol 프로토콜이름 {
프로퍼티
메서드
}
Swift
복사
03. 제네릭 - 모든 타입을 커버하는 방법
Generic
•
타입에 의존하지 않은 범용 코드
func 함수이름<T>(input: T) {
input -> T타입변수
}
Swift
복사