ํํ๋ ฅ์ด ํ๋ถํ๊ณ ์ฝ๊ธฐ ์ฌ์ด ๊ตฌ๋ฌธ์ ๊ฐ์ถ Swift๋ฅผ ํตํด ์๋ก์ด ๊ฐ๋ฐ์๋ ํต์ฌ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ ์ ๋น ๋ฅด๊ฒ ์ดํดํ ์ ์์ต๋๋ค. ๋ํ Develop in Swift ํํ ๋ฆฌ์ผ, Swift ์ฝ๋ฉ ํด๋ฝ ๊ทธ๋ฆฌ๊ณ Swift Playground์ ๊ฐ์ ๋ค์ํ ์๋ฃ๋ฅผ ํตํด ๊ทธ ์ด๋ ๋๋ณด๋ค ์ฝ๊ฒ Swift๋ก ์ฒซ ํ๋ก๊ทธ๋๋ฐ์ ์์ํ ์ ์๊ฒ ๋์์ต๋๋ค.
Apple์ Swift ๊ต์ก ๋ฆฌ์์ค ๋ ์์๋ณด๊ธฐ
์๋ จ๋ ๊ฐ๋ฐ์๋ ๋น ๋ฅด๊ฒ ๋ฐ์ด๋ค์ด ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์๋ ์ฌ์ฉํ๋ ํธ๋ฆฌํ๊ณ ์ต์ํ ์ต์ ๊ธฐ๋ฅ๊ณผ ํจ๊ป Swift๋ง์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ ๋ฐ ์์ ์ฑ๊น์ง ํ์ฉํ ์ ์์ต๋๋ค.
struct Player {
var name: String
var highScore: Int = 0
var history: [Int] = []
init(_ name: String) {
self.name = name
}
}
var player = Player("Tomas")
ํ๋์ ์ด๊ณ ์ง๊ด์ ์ธ ๊ตฌ๋ฌธ์ผ๋ก ์ ์ ํ์ ์ ์ธํ๊ณ , ์ธ์คํด์ค ์์ฑ์ ๋ํ ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํ๋ฉฐ, ์ฌ์ฉ์ ์ ์ ์ด๊ธฐํ ํ๋ก๊ทธ๋จ์ ์ ์ํฉ๋๋ค.
extension Player {
mutating func updateScore(_ newScore: Int) {
history.append(newScore)
if highScore < newScore {
print("\(newScore)! A new high score for \(name)! ๐")
highScore = newScore
}
}
}
player.updateScore(50)
// Prints "50! A new high score for Tomas! ๐"
// player.highScore == 50
ํ์ฅ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ์ฌ ๊ธฐ์กด ํ์ ์ ๊ธฐ๋ฅ์ฑ์ ๋ํ๊ณ , ๋ง์ถคํ ๋ฌธ์์ด ๋ณด๊ฐ์ผ๋ก ์์ฉ๊ตฌ ์ฝ๋๋ฅผ ์ค์ ๋๋ค.
extension Player: Codable, Equatable {}
import Foundation
let encoder = JSONEncoder()
try encoder.encode(player)
print(player)
// Prints "Player(name: "Tomas", highScore: 50, history: [50])"
๊ฐ๊ฒฐํ ํด๋ก์ ๋ก ๊ฐ๋ ฅํ ๋ง์ถคํ ๋ณํ์ ์ํํฉ๋๋ค.
let players = getPlayers()
// Sort players, with best high scores first
let ranked = players.sorted(by: { player1, player2 in
player1.highScore > player2.highScore
})
// Create an array with only the playersโ names
let rankedNames = ranked.map { $0.name }
// ["Erin", "Rosana", "Tomas"]
์๋ํ๋ JSON ์ธ์ฝ๋ฉ ๋ฐ ๋์ฝ๋ฉ๊ณผ ๊ฐ์ ๊ฐ๋ ฅํ ์ธ์ด ๊ธฐ๋ฅ์ ํ์ฉํ๋๋ก ๋ง์ถคํ ํ์ ์ ๋น ๋ฅด๊ฒ ํ์ฅํฉ๋๋ค.