2016-11-20 55 views
5

我正在做一些開關。在我的MenuScene類中,有一些布爾類型是靜態變量,布爾值表示這些開關的狀態。Swift中的靜態布爾引用類型?

這些地址是否可以作爲引用類型,所以我可以確定其他對象能夠通過唯一引用來改變它們的狀態嗎?

的夢想,在我的夢幻般的僞代碼,我希望改變iAmOn影響myButtonABC_state

class MenuScene {   
     static var myButtonABC_state: Bool = false 
     static var myButtonXYZ_state: Bool = false 

    override onDidMoveToView { 

     let buttonABC = Button(withState: MenuScene.myButtonABC_state) 
     let buttonXYZ = Button(withState: MenuScene.myButtonXYZ_state) 
     } 
    } 

狀態。在一個按鈕類

class Button { 

var iAmOn: Bool = false 

    init(withState state: Bool){ 
     iAmOn = state 
    } 

    override onTouchesBegun(... etc...){ 
     if iAmOn { iAMOn = false } 
     else { iAmOn = true} 
    } 

} 
+0

您應該更新了一些相關的代碼你的問題。你有沒有做過任何測試,看看你得到了什麼結果? – rmaddy

+0

@rmaddy我認爲他/她不太確定所有的術語在什麼問::) 困惑,請參閱我的答案,以澄清一些問題(我希望!) – Fluidity

+0

不,@maddy,沒有運行任何測試。已更新問題以顯示我希望發生的事情。不知道如何做到這一點。 – Confused

回答

5

Bool是斯威夫特一個結構;結構是值類型。不要緊,如果它是static var,class var,let,var等,類型是重要的 - 所以不,Bool是值類型。

我認爲你不是所有術語的100%(主要是因爲蘋果公司並沒有像平常那樣在文檔中覆蓋太多,大聲笑)。有「Swift類型」(Bool,Int,你的類/結構等)和「變量/常量類型」(將數據保存在內存寄存器中,例如引用或實際值),以及作爲「內存寄存器寫入/讀取類型」(變量vs vonstant,可變與不可變,var vs let)。

不要沮喪......這對每個人都有點困惑......特別是一開始沒有很好的文檔。 (我很早就開始學習C++指針,並且這種指針超過了我的頭)。

這裏有一個很好的參考材料:(朝向底部) https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html

基本上,如果你想堅持的東西的引用,你必須使用引用類型的內存寄存器。這意味着使用一個類實例靜態沒什麼區別:

/* Test1: */ 

struct Hi { 
    static var sup = "hey" 
} 

var z = Hi.sup 
Hi.sup = "yo" 

print(z) // prints "hey" 

/* Test 2: */ 

class Hi2 { 
    static var sup = "hey" 
} 

var z2 = Hi2.sup 
Hi2.sup = "yo" 

print(z2) // Prints "hey" 

如果你覺得你需要一個指針的東西,是不是一類的裏面,那麼你可以使用UnsafeMutablePointer或類似的東西來自OBJc代碼。或者,你可以在類對象(總是引用)中包裝一個bool。

final class RefBool { 
    var val: Bool 
    init(_ value: Bool) { val = value } 
} 

這裏是使用let引用類型的一些有趣的行爲:

let someBool: RefBool 

someBool = RefBool(true) 
someBool = RefBool(false) // wont compile.. someBool is a `let` 
someBool.val = false  // will compile because of reference type and member is `var` 
+0

@AlexanderMomchilov感謝亞歷克斯我還在工作,一旦我意識到,我錯過了Q的點格式化,並試圖更新信息:) – Fluidity

+2

只是爲了澄清,沒有'NSUnsafeMutablePointer'的Objective-C型。 'UnsafeMutablePointer'是C指針橋接Swift時使用的純Swift類型。但是它們也可以在純Swift中使用('alloc' /'free'等),但是你真的需要一個很好的理由來達到這個低水平。 – JAL

+0

@JAL你知道我認爲這只是一個普通類型的'UnsafeMutablePointer',但隨後我只是隨心所欲地把NS扔在那裏。我應該先檢查..我會更新。謝謝!! – Fluidity