Swift入门:为游戏玩家Master类实现存活判断及数组处理需求
修正后的Swift玩家类实现与存活玩家过滤展示方案
嘿,我已经把你代码里的问题都修正完毕,并且完整实现了你提出的四个功能点,下面是具体的说明和最终可用的代码:
功能实现细节
- isAlive计算属性:已经正确实现为只读计算属性,通过判断
hp > 0来返回玩家的存活状态,完全符合需求。 - 生成10个玩家数组:利用
(0..<10)的循环为每个玩家生成唯一名称(玩家0到玩家9),并随机分配0-20之间的生命值,确保每个玩家的hp值大概率不同。 - 过滤存活玩家:使用数组的
filter方法,精准筛选出isAlive为true的玩家实例。 - 映射并展示列表:通过
map方法将存活的玩家实例转换为自定义的描述字符串,最后用更清晰的格式打印输出存活玩家列表。
完整修正代码
import Foundation import UIKit // 补充导入UIKit框架,否则UIViewController会编译报错 class Master { let playerName: String let hp: Int let avatar: String? // 1. 实现isAlive计算属性,判断玩家生死 var isAlive: Bool { return hp > 0 } // 修正初始化逻辑:移除冗余的默认值赋值,直接通过初始化参数完成属性赋值 init(playerName: String, hp: Int, avatar: String? = nil) { self.playerName = playerName self.hp = hp self.avatar = avatar } } // 实现CustomStringConvertible协议,自定义玩家实例的字符串描述 extension Master: CustomStringConvertible { var description: String { let status = isAlive ? "存活" : "死亡" let avatarInfo = avatar?.isEmpty ?? true ? "无头像" : "有头像" return "\(playerName) - (\(status) / \(hp)) - \(avatarInfo)" } } class MasterViewController: UIViewController { var masters = [Master]() override func viewDidLoad() { super.viewDidLoad() // 2. 创建包含10个不同hp值的玩家数组 (0..<10).forEach { index in masters.append(Master( playerName: "玩家\(index)", hp: Int.random(in: 0...20), avatar: nil )) } // 3. 过滤数组仅保留存活玩家 let aliveMasters = masters.filter { $0.isAlive } // 4. 映射结果数组并以列表形式展示 let mappedMasters: [String] = aliveMasters.map { $0.description } print("存活玩家列表:") mappedMasters.forEach { print("- \($0)") } } }
额外优化说明
- 补充了
UIKit框架的导入,原代码遗漏该导入会导致UIViewController编译失败。 - 优化了
description的字符串拼接逻辑,让代码更简洁易读。 - 调整了打印格式,将存活玩家列表以项目符号形式输出,比原代码的数组打印更直观。
内容的提问来源于stack exchange,提问作者user9211099
相关产品推荐
相关产品推荐

