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.)