如何检查数组中是否存在相同的键?

问题描述

我正在尝试在 IOS 中制作 RPG 游戏,并在 Baldurs Gate 中使用类似的对话系统。我在 plist 文件中创建了两个数组。像这样:

Plist file

如你所见,我有两个数组:PlayerMessage;玩家可以触摸的多个选项列表(它将是)和 NPcmessages;触摸 PlayerMessage 时显示的文本

我正处于可以触摸 NPC 的阶段,它将显示一个黑框(NPcmessageer 节点),其中包含来自数组的文本(通过 plist 文件的 PlayerMessage)。

但是,我不知道如何连接 PlayerMessage 和 NPC Message 中的 Item 0,如果它们存在,请更改 Message:SKLabelNode!文本到 NPcmessage 中的一个。有谁知道如何比较另一个数组中是否存在另一个项目?

这是我使用的代码

    override func touchesBegan(_ touches: Set<UITouch>,with event: UIEvent?)
{
    
    for touch in (touches) {
        
        NPC.name = "NPC"
        
        let Location = touch.location(in: self)
                    
                    var CorrectedLocation = CGPoint()
                    CorrectedLocation.x = Location.x - LocalCamera.position.x
                    CorrectedLocation.y = Location.y - LocalCamera.position.y

        let node = self.atPoint(CorrectedLocation)
        var Message: SKLabelNode!
        Message = SKLabelNode(fontNamed: "Trebuchet MS")

        if (node.name == "NPC") {
            let NPcmessageer = SKSpriteNode (color: UIColor.black,size: CGSize(width:1000,height:1000))
            NPcmessageer.zPosition = 99
            NPcmessageer.position = CGPoint(x:-500,y:-200)
          Message.fontSize = 50
            Message.color = UIColor.white;            Message.position = CGPoint(x:-500,y:-100)
            Message.zPosition = 100

            addChild(NPcmessageer)
            self.addChild(Message)
            for PlayerMessage in NPC.PlayerMessage {
             Message.text = PlayerMessage as?String}
            let label = self.atPoint(CorrectedLocation)
            if label.name == "Message"
            {
                
                
             if NPC.PlayerMessage == NPC.NPcmessage
             {
                Message.text = NPC.NPcmessage as?String
             }

解决方法

如果我理解正确,您想从另一个数组中的一个数组中查找给定元素。

然后您可以使用 firstIdex(of:),如果元素存在,则使用返回的索引来设置 Message 对象

let item = PlayerMessage[0] //assuming this is what you want to find

if let index = NPCMessage.firstIndex(of: item) {
    let Message.text = NPCMessage[index]
}