You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何访问类中的对象?注册新玩家对象的访问与标识问题

嘿,我来帮你搞定这个问题!你遇到的核心问题其实是创建玩家对象后没有保留对它的引用,所以没法后续访问和修改它的属性。下面给你两种实用的解决方案,结合你的Players类来演示:

方案一:创建对象时直接赋值给标识符(变量)

当你调用Players的初始化方法创建新对象时,把它赋值给一个变量(也就是你说的“标识符”),之后就能通过这个变量直接访问和修改对象的属性了。先补全你的类定义,再给你写完整的示例:

class Players {
    var name: String
    var gold: Int
    var accountPassword: String
    
    init(name: String, gold: Int, accountPassword: String) {
        self.name = name
        self.gold = gold
        self.accountPassword = accountPassword
    }
}

func registerNewPlayer(name: String, password: String) -> Players {
    // 创建新玩家并赋值给变量newPlayer(这就是标识符)
    let newPlayer = Players(name: name, gold: 0, accountPassword: password)
    // 在这里就能直接修改属性
    newPlayer.gold = 100 // 给新玩家发初始金币
    return newPlayer // 返回对象,方便外部代码也能访问它
}

// 使用注册函数
let myPlayer = registerNewPlayer(name: "Jared", password: "mySecurePass")
// 后续随时修改属性
myPlayer.name = "JaredP"
myPlayer.gold += 50 // 金币增加50
方案二:用集合管理多个玩家对象

如果你的游戏需要同时管理多个玩家,推荐用字典(用用户名/玩家ID作为键)或者数组来存储所有玩家对象,这样就能通过键或索引快速找到对应的玩家并修改属性:

// 可以在游戏管理器类里或者全局维护这个字典,用来存所有玩家
var allRegisteredPlayers: [String: Players] = [:]

func registerNewPlayer(name: String, password: String) {
    let newPlayer = Players(name: name, gold: 0, accountPassword: password)
    // 用用户名作为唯一标识符存入字典
    allRegisteredPlayers[name] = newPlayer
}

// 注册一个玩家
registerNewPlayer(name: "Jared", password: "mySecurePass")

// 后续找到这个玩家并修改属性
if let jaredPlayer = allRegisteredPlayers["Jared"] {
    jaredPlayer.gold = 200
    jaredPlayer.name = "JaredTheLegend"
}

另外提醒一下:你已经把Players类的属性定义成var(可变)了,这是对的——如果用let定义的话,创建后就没法修改属性值了,这点你做得没问题。

内容的提问来源于stack exchange,提问作者Jared Pieniazek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:25:46