# Swift iOS ๊ฐ๋ฐ ์๋ฒฝ ๊ฐ์ด๋
## ํ์ต ๋ชฉํ
Swift์ SwiftUI๋ก iOS ์ฑ์ ๊ฐ๋ฐํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋๋ค.
## 1. Swift๋?
Apple์ด ๋ง๋ iOS/macOS ๊ฐ๋ฐ ์ธ์ด์
๋๋ค.
- ์์ ํ๊ณ ๋น ๋ฅธ ์ฑ๋ฅ
- ๊ฐ๊ฒฐํ ๋ฌธ๋ฒ
- SwiftUI๋ก ์ ์ธ์ UI ๊ฐ๋ฐ
- Xcode์์ ๊ฐ๋ฐ
## 2. Xcode ์ค์น
App Store์์ Xcode ์ค์น
์ ํ๋ก์ ํธ > iOS App > SwiftUI ์ ํ
## 3. ๊ธฐ๋ณธ ๋ฌธ๋ฒ
// ๋ณ์์ ์์
var name = "Kim" // ๋ณ์ (๋ณ๊ฒฝ ๊ฐ๋ฅ)
let age = 25 // ์์ (๋ณ๊ฒฝ ๋ถ๊ฐ)
// ํ์
๋ช
์
var score: Int = 100
var price: Double = 19.99
var isActive: Bool = true
// ์ต์
๋
var email: String? = nil
if let unwrapped = email {
print(unwrapped)
}
// ๋ฐฐ์ด๊ณผ ๋์
๋๋ฆฌ
var fruits = ["Apple", "Banana"]
var person = ["name": "Kim", "age": "25"]
## 4. ํจ์
func greet(name: String) -> String {
return "Hello, (name)!"
}
// ๊ธฐ๋ณธ๊ฐ
func greet(name: String = "Guest") -> String {
return "Hello, (name)!"
}
// ํด๋ก์
let add = { (a: Int, b: Int) -> Int in
return a + b
}
## 5. SwiftUI ๊ธฐ์ด
import SwiftUI
struct ContentView: View {
var body: some View {
Text("Hello, World!")
.font(.title)
.foregroundColor(.blue)
}
}
## 6. ์ํ ๊ด๋ฆฌ
struct CounterView: View {
@State private var count = 0
var body: some View {
VStack {
Text("Count: (count)")
Button("Add") {
count += 1
}
}
}
}
// ๋ค๋ฅธ ๋ทฐ์์ ๋ฐ์ธ๋ฉ
struct ChildView: View {
@Binding var value: Int
var body: some View {
Button("Increment") { value += 1 }
}
}
// ObservableObject
class UserData: ObservableObject {
@Published var name = ""
}
struct ProfileView: View {
@StateObject var user = UserData()
}
## 7. ๋ ์ด์์
// ์์ง ์คํ
VStack(spacing: 20) {
Text("Title")
Text("Subtitle")
}
// ์ํ ์คํ
HStack {
Image(systemName: "star")
Text("Favorite")
}
// Z ์คํ (๊ฒน์น๊ธฐ)
ZStack {
Color.blue
Text("Overlay")
}
// Spacer
HStack {
Text("Left")
Spacer()
Text("Right")
}
// padding๊ณผ frame
Text("Hello")
.padding()
.frame(width: 200, height: 100)
.background(Color.gray)
## 8. ๋ฆฌ์คํธ
struct ListView: View {
let items = ["Apple", "Banana", "Cherry"]
var body: some View {
List(items, id: .self) { item in
Text(item)
}
}
}
// ForEach
List {
ForEach(items, id: .self) { item in
HStack {
Image(systemName: "circle")
Text(item)
}
}
}
## 9. ๋ค๋น๊ฒ์ด์
struct MainView: View {
var body: some View {
NavigationStack {
List {
NavigationLink("Go to Detail") {
DetailView()
}
}
.navigationTitle("Home")
}
}
}
struct DetailView: View {
var body: some View {
Text("Detail Page")
.navigationTitle("Detail")
}
}
## 10. ๋คํธ์ํฌ ์์ฒญ
struct Post: Codable {
let id: Int
let title: String
}
func fetchPosts() async throws -> [Post] {
let url = URL(string: "https://api.example.com/posts")!
let (data, _) = try await URLSession.shared.data(from: url)
return try JSONDecoder().decode([Post].self, from: data)
}
// ์ฌ์ฉ
struct PostsView: View {
@State private var posts: [Post] = []
var body: some View {
List(posts, id: .id) { post in
Text(post.title)
}
.task {
posts = try? await fetchPosts() ?? []
}
}
}
## 11. ๋ก์ปฌ ์ ์ฅ
// UserDefaults
UserDefaults.standard.set("Kim", forKey: "username")
let name = UserDefaults.standard.string(forKey: "username")
// @AppStorage
struct SettingsView: View {
@AppStorage("isDarkMode") var isDarkMode = false
var body: some View {
Toggle("Dark Mode", isOn: $isDarkMode)
}
}
## 12. ์ฑ ๋ฐฐํฌ
1. Xcode > Product > Archive
2. Distribute App ์ ํ
3. App Store Connect ์
๋ก๋
4. TestFlight ๋ฒ ํ ํ
์คํธ
5. ์ฑ ์ฌ์ฌ ์ ์ถ
## ์ถ์ฒ ํ์ต ์์
1. Swift ๊ธฐ๋ณธ ๋ฌธ๋ฒ
2. SwiftUI ๋ทฐ ๋ง๋ค๊ธฐ
3. ์ํ ๊ด๋ฆฌ ์ดํด
4. ๋ค๋น๊ฒ์ด์
๊ตฌํ
5. API ์ฐ๋ ๋ฐ ๋ฐฐํฌ