notes
IOS - swift
Swift 문법·타입·옵셔널과 iOS 개발 기본 개념 정리.
Swift 기초 문법 가이드
목차
1. 기본 문법
1.1 변수와 상수
// 변수 선언
var name: String = "홍길동"
var age: Int = 25
var height: Double = 175.5
var isStudent: Bool = true
// 상수 선언
let PI: Double = 3.14159
let MAX_COUNT: Int = 100
// 타입 추론
var score = 95 // Int로 추론
var message = "안녕하세요" // String으로 추론
1.2 옵셔널
// 옵셔널 선언
var optionalName: String? = "홍길동"
var optionalAge: Int? = nil
// 옵셔널 바인딩
if let name = optionalName {
print("이름은 \\(name)입니다")
}
// 강제 언래핑 (권장하지 않음)
let forcedName = optionalName!
// 옵셔널 체이닝
let count = optionalName?.count
1.3 컬렉션 타입
// 배열
var numbers: [Int] = [1, 2, 3, 4, 5]
numbers.append(6)
numbers.remove(at: 0)
// 딕셔너리
var person: [String: Any] = [
"name": "홍길동",
"age": 25,
"isStudent": true
]
// 세트
var uniqueNumbers: Set<Int> = [1, 2, 3, 3, 4] // 중복 제거
2. 객체지향 프로그래밍
2.1 클래스와 구조체
// 클래스
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
func introduce() {
print("안녕하세요, 저는 \\(name)이고 \\(age)살입니다.")
}
}
// 구조체
struct Point {
var x: Double
var y: Double
func distance(to point: Point) -> Double {
// 두 점 사이의 거리 계산
return sqrt(pow(point.x - x, 2) + pow(point.y - y, 2))
}
}
2.2 프로토콜
protocol Vehicle {
var numberOfWheels: Int { get }
func start()
func stop()
}
class Car: Vehicle {
var numberOfWheels: Int = 4
func start() {
print("자동차가 출발합니다")
}
func stop() {
print("자동차가 정지합니다")
}
}
3. iOS 개발 필수 개념
3.1 ViewController 생명주기
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 뷰가 로드될 때 호출
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// 뷰가 나타나기 전에 호출
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// 뷰가 나타난 후 호출
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// 뷰가 사라지기 전에 호출
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
// 뷰가 사라진 후 호출
}
}
3.2 Delegate 패턴
protocol DataDelegate: AnyObject {
func didReceiveData(_ data: String)
}
class DataManager {
weak var delegate: DataDelegate?
func fetchData() {
// 데이터를 가져온 후
delegate?.didReceiveData("새로운 데이터")
}
}
class ViewController: UIViewController, DataDelegate {
let dataManager = DataManager()
override func viewDidLoad() {
super.viewDidLoad()
dataManager.delegate = self
}
func didReceiveData(_ data: String) {
print("받은 데이터: \\(data)")
}
}
4. 네트워크 통신
4.1 URLSession 사용
func fetchData() {
guard let url = URL(string: "<https://api.example.com/data>") else { return }
URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error {
print("에러 발생: \\(error)")
return
}
guard let data = data else { return }
do {
let json = try JSONSerialization.jsonObject(with: data)
print("받은 데이터: \\(json)")
} catch {
print("JSON 파싱 에러: \\(error)")
}
}.resume()
}
4.2 async/await 사용
func fetchData() async throws -> Data {
guard let url = URL(string: "<https://api.example.com/data>") else {
throw URLError(.badURL)
}
let (data, _) = try await URLSession.shared.data(from: url)
return data
}
// 사용 예시
Task {
do {
let data = try await fetchData()
// 데이터 처리
} catch {
print("에러 발생: \\(error)")
}
}
5. 실전 예제
5.1 간단한 할 일 목록 앱
struct Todo {
var title: String
var isCompleted: Bool
}
class TodoListViewController: UIViewController {
var todos: [Todo] = []
func addTodo(_ title: String) {
let todo = Todo(title: title, isCompleted: false)
todos.append(todo)
}
func toggleTodo(at index: Int) {
todos[index].isCompleted.toggle()
}
func deleteTodo(at index: Int) {
todos.remove(at: index)
}
}