[Swift5] Methods 2
Methods
タイプメソッド
インスタンスではなく、タイプで宣言されるメソッドです.メソッドを宣言する前に、static
キーワードを使用します.クラスはclass
のキーワードを使用して、サブクラスが親メソッドを上書きします.
この方法の特徴は、インスタンスメソッドのように.
演算子で呼び出すことができるが、インスタンスを作成する必要がなく、タイプ自体から直接宣言することができることである.class SomeClass {
class func someTypeMethod() {
// type method implementation goes here
}
}
SomeClass.someTypeMethod()
SomeClass
はインスタンスではなくクラスタイプであることがわかる.
タイプメソッドは、前にタイプ名を書く必要はありません.タイプメソッド名だけで使用できます.struct LevelTracker {
static var highestUnlockedLevel = 1
var currentLevel = 1
static func unlock(_ level: Int) {
if level > highestUnlockedLevel { highestUnlockedLevel = level }
}
static func isUnlocked(_ level: Int) -> Bool {
return level <= highestUnlockedLevel
}
@discardableResult
mutating func advance(to level: Int) -> Bool {
if LevelTracker.isUnlocked(level) {
currentLevel = level
return true
} else {
return false
}
}
}
highestUnlockedLevel
は、タイプメソッドによって管理される.与えられたパラメータ値がlevel
より大きい場合、更新highestUnlockedLevel
のパラメータ値はunlock
であり、パラメータ値がlevel
より小さい場合、戻り基準値はhighestUnlockedLevel
である.これは、これまでに入力されたisUnlocked
の中で、最も高い価格を維持する比較方法である.
タイプメソッドおよびタイプpropertyがインスタンスを参照できる場合、level
などのインスタンスpropertyを使用して、インスタンスを使用するユーザの個人情報を追跡できます.class Player {
var tracker = LevelTracker()
let playerName: String
func complete(level: Int) {
LevelTracker.unlock(level + 1)
tracker.advance(to: level + 1)
}
init(name: String) {
playerName = name
}
}
var player = Player(name: "Argyrios")
player.complete(level: 1)
print("highest unlocked level is now \(LevelTracker.highestUnlockedLevel)")
// Prints "highest unlocked level is now 2"
player = Player(name: "Beto")
if player.tracker.advance(to: 6) {
print("player is now on level 6")
} else {
print("level 6 hasn't yet been unlocked")
}
// Prints "level 6 hasn't yet been unlocked"
currentLevel
レベルで各プレイヤーの各レベルを追跡し、タイプメソッドでタイプpropertyが最高値を得ることができます.インスタンスのプロパティとタイプのプロパティと値のPlayer
を比較して、現在のインスタンスが持つレベルが解除されているかどうかを確認します.
Reference
この問題について([Swift5] Methods 2), 我々は、より多くの情報をここで見つけました
https://velog.io/@j_aion/Swift5-Methods-2
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
class SomeClass {
class func someTypeMethod() {
// type method implementation goes here
}
}
SomeClass.someTypeMethod()
struct LevelTracker {
static var highestUnlockedLevel = 1
var currentLevel = 1
static func unlock(_ level: Int) {
if level > highestUnlockedLevel { highestUnlockedLevel = level }
}
static func isUnlocked(_ level: Int) -> Bool {
return level <= highestUnlockedLevel
}
@discardableResult
mutating func advance(to level: Int) -> Bool {
if LevelTracker.isUnlocked(level) {
currentLevel = level
return true
} else {
return false
}
}
}
class Player {
var tracker = LevelTracker()
let playerName: String
func complete(level: Int) {
LevelTracker.unlock(level + 1)
tracker.advance(to: level + 1)
}
init(name: String) {
playerName = name
}
}
var player = Player(name: "Argyrios")
player.complete(level: 1)
print("highest unlocked level is now \(LevelTracker.highestUnlockedLevel)")
// Prints "highest unlocked level is now 2"
player = Player(name: "Beto")
if player.tracker.advance(to: 6) {
print("player is now on level 6")
} else {
print("level 6 hasn't yet been unlocked")
}
// Prints "level 6 hasn't yet been unlocked"
Reference
この問題について([Swift5] Methods 2), 我々は、より多くの情報をここで見つけました https://velog.io/@j_aion/Swift5-Methods-2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol