/ / SWIFT pierwsze kroki - szybkie

Pierwsze kroki SWIFT - szybkie

mam klasę Master który reprezentuje gracza w mojej grze.

Muszę dodać do mojego obliczoną właściwość IsAlive Master obiekt oparty na punktach życia gracza, który pozwala mi stwierdzić, czy gracz jest martwy czy żywy.

Potrzebuję też tablicy z 10 graczami o różnej ilości punktów życia (życia).

Następnie muszę przefiltrować tablicę tylko do graczy, którzy nadal żyją, a ostatnim krokiem jest zmapowanie wynikowej tablicy i wyświetlenie tej tabeli jako listy.

Import Foundation


class Master {
let playerName : String = ""
let hp : Int = 0
var isAlive : Bool {
get{ return hp >0
}
}
let avatar : String? = nil
init (playerName: String, hp: Int, isAlive: Bool, avatar: String? = nil ) {
self.playerName = playerName
self.hp = hp
self.isAlive = isAlive
self.avatar = avatar
}
extension Master: CustomStringConvertible {
var description: String() {
if(avatar.isEmpty){
return name + " - (" + isAlive + " / " + hp + ") - Nie posada
awatara"
}else{
return name + " - (" + isAlive + " / " + hp + ") - Posiada awatar"
}
}

}

}
class MasterViewController: UIViewController {

var masters = [Master]()

override func viewDidLoad() {
super.viewDidLoad()


(0..<10).forEach { masters.append(Master(playerName: "q"+$0, hp: 12 +
$0,
avatar: nil)
(playerName: "w"+$1, hp: 12 +
$1,
avatar: nil)
(playerName: "e"+$2, hp: 12 +
$2,
avatar: nil)
(playerName: "qw"+$3, hp: 12 +
$3,
avatar: nil)
(playerName: "we"+$4, hp: 12 +
$4,
avatar: nil)
(playerName: "2"+$5, hp: 12 +
$5,
avatar: nil))}


let aliveMasters = masters.filter { $0.isAlive }


let mappedMasters: [String] = masters.map { $0.playerName }
print("Alive Masters are : (mappedMasters)")

}

}

Odpowiedzi:

1 dla odpowiedzi № 1

Właściwość obliczona to po prostu sposób kontrolowania sposobu dostępu do właściwości, możesz zmienić:

let isAlive : Bool

do :

var isAlive: Bool {
get {
return hp > 0
}
}

Usuń także wszystkie odwołania do kroków isAlive z init (_ :), po prostu zachowaj obliczoną właściwość.

Następnie z innego kontrolera widoku używającego modelu:

class MasterViewController: UIViewController {

var masters = [Master]()

override func viewDidLoad() {
super.viewDidLoad()

// add array with 10 players with hp points
masters.append(Master(playerName: "John Doe", hp: 100, avatar: nil))
masters.append(Master(playerName: "Jack Jones", hp: 50, avatar: nil))
masters.append(Master(playerName: "Susan Scott", hp: 150, avatar: nil))
// Add any masters here ...
// Another way of doing it : (0..<10).forEach { masters.append(Master(playerName: ""+$0, hp: 12 + $0, avatar: nil)) }

// filter array to return alive players
let aliveMasters = masters.filter { $0.isAlive }

// map the resulenter code hereting array and display this table as a list.
// Here aliveMasters is already an array of Masters, map is used to "transform" data
let mappedMasters: [String] = masters.map { $0.playerName }
print("Alive Masters are : (mappedMasters)")

}

}