
enum CaseError : Error {
case cantChar; // Character를 사용할 수 없음
case cantSameNumber; // 같은 수는 사용할 수 없음
case cantUseZero; // 0은 사용할 수 없음
}
throw와 throwsthrows는 리턴 값을 반환하기 전에 오류가 발생하면 에러 객체를 반환한다는 의미이며, 오류가 발생할 메소드 제목 옆에 작성하면 된다.throw는 오류가 발생할 구간에 작성한다.throw로 던진 에러는 do-catch문에서 처리한다.trytry?try!nil이 할당되면) 참조 횟수가 1 감소한다.nil로 설정된다.weak를 사용하며, 옵셔널로 선언되는 참조이다.nil로 설정되게 한다.unowned는 옵셔널이 아닌 비소유 참조를 나타낸다.gettable, settable을 명시하며, 프로퍼티는 항상 var로 선언해야 한다.protocol Coordination
{
var top: String { get set }
var pants: String { get set }
init(top: String, pants: String)
func checkCoordination()
}
protocol Hair {
var hair: String { get }
func checkHairStyle()
}
struct Person: Coordination, Hair {
var top: String
var pants: String
let hair: String = "포마드"
func checkHairStyle() {
print("오늘의 헤어스타일은 \(hair)스타일")
}
func checkCoordination() {
print("상의: \(top)\n하의: \(pants)")
}
init(top: String, pants: String) {
self.top = top
self.pants = pants
}
}
let safari: Person = Person(top: "긴팔", pants: "반바지")
safari.checkHairStyle()
safari.checkCoordination()
//오늘의 헤어스타일은 포마드스타일
//상의: 긴팔
//하의: 반바지
associatedtype은 프로토콜 내에서 실제 타입을 명시하지 않고, 해당 프로토콜을 채택하는 타입에서 실제 타입을 결정하도록 하는데 사용된다.typealias는 기존 타입에 대해 새로운 이름을 지정하거나 복잡한 타입에 대한 간결한 별칭을 생성할 때 사용되며, 긴 이름을 간략하게 대체할 때 유용하다.protocol Container {
associatedtype Item // 연관 타입
var count: Int { get }
mutating func append(_ item: Item)
func item(at index: Int) -> Item
}
struct IntContainer: Container {
typealias Item = Int // 연관 타입을 Int로 typealias하여 구현
var items = [Item]()
var count: Int {
return items.count
}
mutating func append(_ item: Item) {
items.append(item)
}
func item(at index: Int) -> Item {
return items[index]
}
}
var intBox = IntContainer()
intBox.append(5)
intBox.append(10)
print(intBox.item(at: 0)) // 출력: 5
extension 확장할 타입 이름 {
//타입에 추가될 새로운 기능 구현
}
extension 확장할 타입 이름: 프로토콜1, 프로토콜2, 프로토콜3 {
//프로토콜 요구사항 구현
}
확장이 가능한 것
확장이 불가능한 것
// 딕셔너리 예시
@frozen public struct Dictionary<Key, Value> where Key : Hashable {
/// The element type of a dictionary: a tuple containing an individual
/// key-value pair.
public typealias Element = (key: Key, value: Value)
var fruitsInventory: Dictionary<String, Int> = [:]
fruitsInventory["apple"] = 3