【问题标题】:Reading value from child SKSpriteNode从子 SKSpriteNode 读取值
【发布时间】:2015-11-29 04:51:50
【问题描述】:

基本卡对象:

import Foundation
import SpriteKit

class Card: SKSpriteNode {
    var cardValue:Int = 0

    init() {
        cardValue = 10
    }
    ...
}

为什么当它是 SKNode 的子节点时我无法读取此值?使用lldb 进行调试时,它向我显示了整个对象内的值,但我无法访问它:

(lldb) p handsOnScreen.children[0]
(BlackJack.Card) $R0 = 0x00007f84937a21a0 {
  SpriteKit.SKSpriteNode = {
    SKNode = {
      UIResponder = {
        NSObject = {
          isa = Blackjack.Card
        }
        _hasAlternateNextResponder = false
        _hasInputAssistantItem = false
      }
      _parent = 0x00007f8493708b60
      _children = nil
      _actions = nil
      _keyedActions = nil
      _keyedSubSprites = nil
      _info = nil
      _attributeValues = nil
      _name = nil
      _userData = nil
      _constraints = nil
      _version = 17096000
      _userInteractionEnabled = false
      _reachConstraints = nil
    }
    _light = nil
    _shouldRepeatTexture = false
  }
  cardValue = 10
  ...

看到那个输出后,我想我可以试试这个:

(lldb) p handsOnScreen.children[0].cardValue
error: <EXPR>:1:35: error: value of type 'SKNode' has no member 'cardValue'

我做错了什么?

【问题讨论】:

    标签: ios swift skspritenode sknode


    【解决方案1】:

    您必须将 SKNode 转换为 Card 才能访问其属性。

    if let card = handsOnScreen.children[0] as? Card {
      print(card.cardValue)
    }
    

    我使用if let 语句而不是强制展开 (as!) 以确保安全,以防children[0] 处的对象碰巧不是Card

    【讨论】:

    • 不错!谢谢,有道理。也感谢您提供更可靠的答案(因为那个孩子可能不是卡片)。
    猜你喜欢
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多