13일차: SwiftUI의 100일

프로토콜, 확장 및 체크포인트 8



https://www.hackingwithswift.com/100/swiftui/13

프로토콜


Protocols는 데이터 유형이 지원할 것으로 예상되는 메서드 및 속성의 청사진을 정의합니다. 프로토콜은 class , struct 또는 enum 에 의해 채택되거나 준수될 수 있습니다. 그런 다음 프로토콜은 클래스, 구조 또는 열거형에 의해 채택될 수 있습니다.

protocol Vehicle {
    var name: String { get }
    var currentPassengers: Int { get set }

    func estimateTime(for distance: Int) -> Int
    func travel(distance: Int)
}

struct Car: Vehicle {
    let name = "Car"
    var currentPassengers = 1

    func estimateTime(for distance: Int) -> Int {
        distance / 50
    }

    func travel(distance: Int) {
        print("I'm driving \(distance)km.")
    }

    func openSunroof() {
        print("It's a nice day!")
    }
}

func commute(distance: Int, using vehicle: Vehicle) {
    if vehicle.estimateTime(for: distance) > 100 {
        print("That's too slow! I'll try a different vehicle.")
    } else {
        vehicle.travel(distance: distance)
    }
}

let car = Car()
commute(distance: 100, using: car)



확장 프로그램



확장 기능을 사용하면 우리가 생성했든 다른 사람이 생성했든 관계없이 모든 유형에 기능을 추가할 수 있습니다. 심지어 Apple 자체 유형 중 하나일 수도 있습니다.

extension String {
    func trimmed() -> String {
        self.trimmingCharacters(in: .whitespacesAndNewlines)
    }
}

var quote = "   The truth is rarely pure and never simple   "
let trimmed = quote.trimmed()



체크포인트 8



건물을 설명하는 프로토콜을 만들고 다양한 속성과 메서드를 추가한 다음 이를 준수하는 두 개의 구조체 House와 Office를 만듭니다. 프로토콜에는 다음이 필요합니다.
  • 얼마나 많은 방이 있는지 저장하는 속성입니다.
  • 비용을 정수로 저장하는 속성(예: 건물 비용이 $500,000인 경우 500,000)
  • 건물 판매를 담당하는 부동산 중개인의 이름이 저장되어 있는 부동산입니다.
  • 다른 속성과 함께 해당 건물이 무엇인지 설명하는 건물의 판매 요약을 인쇄하는 방법입니다.

  • 해결책

    좋은 웹페이지 즐겨찾기