I primi passi di SWIFT: rapido

Ho una lezione Master che rappresenta un giocatore nel mio gioco.

Devo aggiungere una proprietà calcolata isAlive al mio Master oggetto basato sui punti vita del giocatore che mi permette di dire se il giocatore è vivo o morto.

Ho anche bisogno di un array con 10 giocatori con diverse quantità di punti vita.

Successivamente ho bisogno di filtrare la matrice solo ai giocatori che sono ancora vivi, e l'ultimo passo è mappare la matrice risultante e visualizzare questa tabella come una lista.

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

}

}

risposte:

1 per risposta № 1

La proprietà calcolata è semplicemente un modo per controllare il modo in cui si accede a una proprietà, è possibile modificare:

let isAlive : Bool

a :

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

Rimuovi anche tutti i riferimenti a isAlive passi da init (_ :), mantieni la proprietà calcolata.

Quindi, da un altro controller di vista che utilizza il tuo modello:

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

}

}