代码之家  ›  专栏  ›  技术社区  ›  Matthew

在swift中可以有计算布尔属性吗?

  •  1
  • Matthew  · 技术社区  · 7 年前

    我试着在一个只有一支球队拥有球的运动中建立控球模型: homeTeamHasPossession awayTeamHasPossession . 一个布尔值只有两个选项,看起来很有意义,但是写起来很笨拙 !homeTeamHasPossession 我真正的意思是 拥有 .

    一个简单的答案是 拥有 一个函数,而不是一个变量,但是可以选择切换它们中的任何一个:

    var homeTeamHasPossession:Bool = true
    func awayTeamHasPossession() -> Bool {
        return !homeTeamHasPossession
    }
    
    print("A: " + homeTeamHasPossession.description)    // A: true
    print ("B: " + awayTeamHasPossession().description) // B: false
    
    homeTeamHasPossession.toggle()
    
    print("A: " + homeTeamHasPossession.description)    // A: false
    print ("B: " + awayTeamHasPossession().description) // B: true
    
    awayTeamHasPossession().toggle() // I can't do this
    

    我是不是漏掉了一些显而易见的东西?我可以用另外一种模式吗?我是不是太挑剔了 !母队拥有 不够有表现力?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Sweeper    7 年前

    你做不到 toggle 因为 awayTeamHasPossession 甚至不是一个属性,更不用说可变属性了。

    要修复它,只需编写一个可变的计算属性!

    var awayTeamHasPossession: Bool {
        get { return !homeTeamHasPossession }
        set { homeTeamHasPossesion = !newValue }
    }
    

    现在你可以:

    awayTeamHasPossession.toggle()
    

    实际上,切换 awayTramHasPossession 与切换相同 homeTeamHasPossession 不是吗?所以另一种解决办法是 homeTeamHasPossession.toggle()

    推荐文章