gpt4 book ai didi

swift - 如何传递对 boolean 值的引用而不是它的值?

转载 作者:搜寻专家 更新时间:2023-10-31 22:58:37 26 4
gpt4 key购买 nike

我想使用 boolean 值作为状态存储。

为此,我需要能够从项目的不同位置更改它们的状态。

为此,我需要在某个地方存储它们,以及一种传递对它们的引用的方法。

我试过将它们存储为 static variables in a GameManager,但是传递对这些的引用似乎只传递了 true 或 false 的值,而不是引用。

我如何实现拥有可通过的 boolean 值引用的目标我可以从项目的任何部分更改它的状态?

更新:

这可能不是最好的方法,但这实现了拥有一堆我可以在游戏世界中使用的状态 boolean 值的目标:

class GameManager {

static let sharedInstance = GameManager()

var previewAudioIsON: Bool = false
var previewVisuaIsOn: Bool = false
var timerDisplayIsOn: Bool = false
var quickStartIsOn: Bool = false

func touchedPreviewAudioButton() -> Bool {
if previewAudioIsON { previewAudioIsON = false}
else { previewAudioIsON = true }
return previewAudioIsON
}

func touchedPreviewVisualButton() -> Bool {
if previewVisuaIsOn { previewVisuaIsOn = false }
else { previewVisuaIsOn = true }
return previewVisuaIsOn
}

func touchedTimeDisplayButton() -> Bool {
if timerDisplayIsOn { timerDisplayIsOn = false }
else { timerDisplayIsOn = true }
return timerDisplayIsOn
}

func touchedQuickStartButton() -> Bool {
if quickStartIsOn { quickStartIsOn = false }
else { quickStartIsOn = true }
return quickStartIsOn
}
}

最佳答案

前几天我给了你部分错误的信息(我脑子放屁了),我需要为此道歉。我在测试中忽略了一些东西......

如果您不想像我建议的那样创建 RefBool 实例(需要更多的工作,不推荐),那么您需要这样做:

/// Mutates a boolean:
func toggle(_ boolean: inout Bool) -> Bool {
boolean ? (boolean = false) : (boolean = true)
return boolean
}

/// Static state manager for Booleans
struct IsOn {

private static var
_previewAudio = false,
_previewVisual = false,
_timerDisplal = false,
_quickStart = false

enum State { case toggle, get }

static func previewAudio(_ toggleVal: State = .get) -> Bool {
if toggleVal == .toggle { toggle(&_previewAudio) }; return _previewAudio
}

// ... others
}

测试:

let referenceToPA = IsOn.previewAudio

print ( IsOn.previewAudio() ) // False (default pram works)
print ( referenceToPA(.get) ) // False (can't use default pram)

referenceToPA(.toggle)

print ( IsOn.previewAudio() ) // True
print ( referenceToPA(.get) ) // True

IsOn.previewAudio(.toggle)

print ( IsOn.previewAudio() ) // False
print ( referenceToPA(.get) ) // False



但老实说,从我的其他答案中执行 RefBool 会更容易,那么您就不需要枚举或函数:

/// Holds a boolean in .val:
final class RefBool { var val: Bool; init(_ boolean: Bool) { val = boolean } }

/// Static state manager for Booleans
struct IsOn {
static var
previewAudio = RefBool(false),
previewVisual = RefBool(false),
timerDisplal = RefBool(false),
quickStart = RefBool(false)
}

便利函数(非必要):

/// Mutates a boolean:
func toggle(_ boolean: inout Bool) -> Bool {
boolean ? (boolean = false) : (boolean = true)
return boolean
}

/// Mutates .val:
func toggle(_ refBool: RefBool) -> Bool {
refBool.val ? (refBool.val = false) : (refBool.val = true)
return refBool.val
}

测试2:

let refToPA = IsOn.previewAudio

refToPA.val = true

print(refToPA.val) // true
print(IsOn.previewAudio.val) // true

toggle(&refToPA.val)

print(refToPA.val) // false
print(IsOn.previewAudio.val) // false

toggle(refToPA) // Using our fancy second toggle

print(refToPA.val) // true
print(IsOn.previewAudio.val) // true

关于swift - 如何传递对 boolean 值的引用而不是它的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40745099/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com