對不起初學者的問題和我糟糕的英語。
我需要在我的類 Team 中創建一個函式,該函式將檢查我的陣列以查看玩家是否存在,如果不存在,它將回傳錯誤,如果存在,它將在兩個陣列之間進行交換。
示例:我有一個包含首發球員和預備隊球員的陣列,球員 1,2 和 3 是首發球員,球員 4,5 和 6 是替補球員。
所以當我想做球員交換時,我可以使用類似的東西: Team.swapfunc(player1, player4) 或類似的東西
我的示例代碼:
class SoccerPlayers {
let name: String
let number: Int
init(name: String, number: Int) {
self.name = name
self.number = number
}
}
class Team {
var nameTeam: String
// Array of players
var startingPlayers:[SoccerPlayers] = []
var reservePlayers:[SoccerPlayers] = []
init(nameTeam:String, startingPlayers: [SoccerPlayers], reservePlayers: [SoccerPlayers]) {
self.nameTeam = nameTeam
self.startingPlayers = startingPlayers
self.reservePlayers = reservePlayers
}
}
var player1: SoccerPlayers = SoccerPlayers(
name: "Andre",
number: 1
)
var player2: SoccerPlayers = SoccerPlayers(
name: "Joao",
number: 2
)
var player3: SoccerPlayers = SoccerPlayers(
name: "Matheus",
number: 3
)
var player4: SoccerPlayers = SoccerPlayers(
name: "Junior",
number: 4
)
var player5: SoccerPlayers = SoccerPlayers(
name: "Fabio",
number: 5
)
var player6: SoccerPlayers = SoccerPlayers(
name: "Paulo",
number: 6
)
let team1 = Team(nameTeam:"YourTeam", startingPlayers:[player1, player2, player3], reservePlayers:[player4, player5, player6])
}
obs:此代碼僅用于學習,不是真正的作業專案
uj5u.com熱心網友回復:
讓我們分解一下,我們需要做的是
- 檢查相應陣列中是否存在玩家
- 從陣列中洗掉它們
- 將它們插入另一個陣列
要檢查一個玩家是否存在,我們希望能夠比較兩個玩家,我們可以手動進行,也可以讓玩家型別對應,Equatable并決定是什么讓兩個玩家相等,這里我決定它是唯一定義一個播放器,所以我們正在使用它。
struct SoccerPlayer: Equatable { // Conform to Equatable
let name: String
let number: Int
// This function will automatically be used whenever some other function want's to check if two players are equal
static func == (lhs: SoccerPlayer, rhs: SoccerPlayer) {
lhs.number == rhs.number
}
}
請注意,我已從類更改為結構,因為這是對此類資料/功能的推薦。我還將名稱更改為 SoccerPlayer,因為每個實體都有一個玩家
在交換函式中,我們需要檢查一個玩家,然后將其從陣列中移除,查看 Array 型別,我們看到它有一個移除函式,該函式將索引(陣列中的位置)作為引數,因此我們想要獲取首先是每個玩家的索引。
這個函式firstIndex(of:)在這里是完美的,因為它回傳一個索引,如果沒有找到任何東西,它就會回傳 nil,所以我們也可以使用它來進行驗證。
let playerIndex = startingPlayers.firstIndex(of: player)
如果陣列不包含播放器,這里 playerIndex 將為 nil,也不會將播放器作為引數傳遞給函式,因為它符合Equatable
為了一次性執行檢查并獲得結果,我們使用了一個guard陳述句。一旦我們有了索引,我們就可以從一個陣列中洗掉玩家并將它們添加到另一個陣列中。這是屬于的完整交換功能Team
mutating func swap(player: SoccerPlayer, substitute: SoccerPlayer) -> Bool {
guard let playerIndex = startingPlayers.firstIndex(of: player),
let substituteIndex = reservePlayers.firstIndex(of: substitute) else {
return false
}
// Use the indices to remove players
startingPlayers.remove(at: playerIndex)
reservePlayers.remove(at: substituteIndex)
// Add them to the other array
startingPlayers.append(substitute)
reservePlayers.append(player)
return true
}
請注意,我也已更改Team為結構,并且該mutating關鍵字用于告訴編譯器我們正在更新結構。
我真的不明白你回傳錯誤的意思,所以我只是回傳一個布林值。
As an extra check you could test that each player doesn't exists in the array we are going to add it to
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/425797.html
