日10 - 11 : Swiftuiの100日
13280 ワード
構造、計算されたプロパティ、およびプロパティオブザーバ
https://www.hackingwithswift.com/100/swiftui/10
構造
クラスとenumsのように、Structsは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.")
}
}
}
計算のプロパティ
構造体は2種類のプロパティを持つことができます.ストアドプロパティは、構造体のインスタンス内のデータを保持する変数または定数であり、計算されたプロパティは、アクセスされるたびに動的にプロパティの値を計算します.
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
データを読み込み、計算するset
ユーザーがプロパティに割り当てるしようとした値に基づいて直接データを書き込み/更新する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
アクセス制御
アクセス制御はstructのプロパティとメソッドを構造体の外部からどのようにアクセスできるかを制御します.
Swiftアクセス制御のいくつかのレベルを提供しています.
public
アクセスは構造体外では使えませんfileprivate
現在のファイルの外ではアクセスできませんprivate
アクセス可能private(set)
アクセス-どこでも読むことができますが、structのメソッドだけがそれに書き込むことができます.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