10-11일 차: SwiftUI의 100일
                                            
                                                
                                                
                                                
                                                
                                                
                                                 13536 단어  swift100daysofcodeswiftui
                    
구조체, 계산된 속성 및 속성 관찰자
https://www.hackingwithswift.com/100/swiftui/10
구조체
클래스 및 열거형과 마찬가지로 구조체는 Swift에서 자체 변수 및 함수로 완성된 사용자 정의 유형을 구현하는 방법입니다.
struct Album {
    let title: String
    let artist: String
    let year: Int
    func printSummary() {
        print("\(title) (\(year)) by \(artist)")
    }
}
let red = Album(title: "Red", artist: "Taylor Swift", year: 2012)
print(red.title)
red.printSummary()
돌연변이 기능
함수가 구조체의 데이터를 변경하도록 허용하려면 모든 함수에
mutating 키워드를 추가할 수 있습니다.struct Employee {
    let name: String
    var vacationRemaining: Int
    mutating func takeVacation(days: Int) {
        if vacationRemaining > days {
            vacationRemaining -= days
            print("I'm going on vacation!")
            print("Days remaining: \(vacationRemaining)")
        } else {
            print("Oops! There aren't enough days remaining.")
        }
    }
}
계산된 속성
구조체는 두 종류의 속성을 가질 수 있습니다. 저장된 속성은 구조체의 인스턴스 내부에 데이터 조각을 보유하는 변수 또는 상수이고 계산된 속성은 액세스할 때마다 동적으로 속성 값을 계산합니다.
struct Employee {
    let name: String
    var vacationAllocated = 14
    var vacationTaken = 0
    var vacationRemaining: Int {
        get {
        vacationAllocated - vacationTaken
        }
        set {
            vacationAllocated = vacationTaken + newValue
        }
    }
}
var archer = Employee(name: "Sterling Archer", vacationAllocated: 14)
archer.vacationTaken += 4
archer.vacationRemaining = 5
print(archer.vacationAllocated)
get로 표시된 Getter는 데이터를 읽고 계산하는 반면, set로 표시된 Setter는 사용자가 newValue라는 이름을 사용하여 속성에 할당하려고 했던 값을 기반으로 데이터를 직접 쓰고/업데이트합니다.재산 관찰자
속성 관찰자는 속성이 변경될 때 실행되는 코드 블록입니다. 속성이 방금 변경되었을 때 실행할 관찰자
didSet 및 속성이 변경되기 전에 실행할 관찰자willSet.struct App {
    var contacts = [String]() {
        willSet {
            print("Current value is: \(contacts)")
            print("New value will be: \(newValue)")
        }
        didSet {
            print("There are now \(contacts.count) contacts.")
            print("Old value was \(oldValue)")
        }
    }
}
var app = App()
app.contacts.append("Adrian E")
app.contacts.append("Allen W")
커스텀 이니셜라이저
사용자 지정 이니셜라이저를 만들려면
init 키워드 없이 func 함수를 사용하십시오.struct Player {
    let name: String
    let number: Int
    init(name: String) {
        self.name = name
        number = Int.random(in: 1...99)
    }
}
let player = Player(name: "Megan R")
print(player.number)
액세스 제어, 정적 속성 및 메서드, 체크포인트 6
https://www.hackingwithswift.com/100/swiftui/11
액세스 제어
액세스 제어는 구조체 외부에서 구조체의 속성 및 메서드에 액세스할 수 있는 방법을 제어합니다.
Swift는 여러 수준의 액세스 제어를 제공합니다.
public 액세스 - 구조체 외부에서 사용할 수 없습니다fileprivate 액세스 - 현재 파일 외부에서 사용할 수 없음private 액세스 - 어디서나 사용 가능private(set) 액세스 - 어디에서나 읽을 수 있지만 구조체의 메서드만 쓸 수 있습니다.struct BankAccount {
    private var funds = 0
    mutating func deposit(amount: Int) {
        funds += amount
    }
    mutating func withdraw(amount: Int) -> Bool {
        if funds > amount {
            funds -= amount
            return true
        } else {
            return false
        }
    }
}
정적 속성 및 메서드
속성이나 메소드를 직접 사용하고 싶다면, 즉 다양한 곳에서 접근해야 하는 고정 데이터를 저장하고 싶다면 속성과 메소드에
static를 사용하면 된다.struct AppData {
    static let version = "1.3 beta 2"
    static let saveFilename = "settings.json"
    static let homeURL = "https://www.hackingwithswift.com"
}
print(AppData.version)
체크포인트 6
모델, 좌석 수, 현재 기어를 포함하여 자동차에 대한 정보를 저장하는 구조체를 만든 다음 기어를 위 또는 아래로 변경하는 메서드를 추가합니다. 변수 및 액세스 제어에 대해 생각해 보십시오. 상수가 아닌 변수여야 하는 데이터는 무엇이며 공개적으로 노출되어야 하는 데이터는 무엇입니까? 기어 변경 방법이 어떻게든 입력을 검증해야 합니까?
해결책
Reference
이 문제에 관하여(10-11일 차: SwiftUI의 100일), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/johnkevinlosito/day-10-11-100-days-of-swiftui-1d8l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)