구조체(Struct)
- 클래스와 마찬가지로 프로퍼티에 값을 저장하거나 메서드를 통해 기능을 제공하고 캡슐화할 수 있는 사용자 정의 타입
- 생성자(initializer)를 정의하지 않으면 구조체가 자동으로 생성자를 제공한다
- 값 타입이다
- 상속이 불가능하다
struct Coffee {
var name: String?
var size: String?
func brewCoffee() -> String {
if let name = self.name {
return "\(name)) 한 잔 나왔습니다"
} else {
return "오늘의 커피 한 잔 나왔습니다"
}
}
let americano = Coffee(name: "아메리카노")
struct ShoppingListItem {
let name: String?
let qauntity: Int
var purchased = false
}
let item1 = ShoppingListItem(name: "칫솔", quantity: 1)
let item2 = ShoppingListItem(name: "치약", quantity: 1, purchased: true)
let item3 = ShoppingListItem(name" nil, quantity: 1, purchased: true)
열거형(Enum)
- 관련된 값으로 이루어진 그룹을 같은 타입으로 선언해 타입 안전성을 보장하는 방법
- 값 타입이다
- Swift의 열거형은 연관 값을 가질 수 있다. 이는 각 case가 특정 값을 연결하여 저장할 수 있는 기능을 제공한다
- enum은 switch 문과 잘 어울린다
enum Trade {
case buy(stock: String, amount: Int)
case sell(stock: String, amount: Int)
case hold
}
let trade1 = Trade.buy(stock: "AAPL", amount: 100)
let trade2 = Trade.sell(stock: "GOOG", amount: 50)
let trade3 = Trade.hold
func processTrade(trade: Trade) {
switch trade {
case .buy(let stock, let amount):
print("Buy \(amonut) shares of \(stock).")
case .sell(let stock, let amount):
print("Sell \(amount) shared of \(stock).")
case .hold:
print("Hold this position")
}
}
processTrade(trade: trade1)