2017-08-11 38 views
1

當我在這裏搜索時,現在我知道幾乎所有在Swift中的值都是基於值的,而不是基準值。我也讀過一門課有引用。我盡我所能,但下面的代碼不會打印任何東西。如果任何人都可以幫助我在數組的幫助下打印出該行,那將是非常棒的:)(如果有可能的話......)。值不在數組中更新

編輯:我想在數組中有5個布爾值,他們都有一個didSet方法。當我訪問它們時,那​​個特定的didSet會觸發。那可能嗎?

class PowerUpBooleans{ 
    var boolean: Bool 
    init(boolean: Bool){ 
     self.boolean = boolean 
    } 
} 
var iWantToChangeThis = false{ 
     didSet{ 
      print("it worked") 
     } 
    } 
    var powerUpBooleans = [PowerUpBooleans]() 
override func viewDidLoad() { 
     super.viewDidLoad() 
     powerUpBooleans.append(PowerUpBooleans(boolean: iWantToChangeThis)) 
     powerUpBooleans[0].boolean = true 
    } 
+1

布爾是傳值,而不是由參考 – koropok

+0

@koropok是但沒有任何保持在一個陣列到布爾參考?或者這是不可能的?謝謝。 – NoKey

+0

你可以嘗試下面的答案,或者使用inout。 – koropok

回答

3

我想你想設置一些布爾值有自己的觸發器。

正如我所知,使得按類包裝的值類型只能使其成爲引用類型。

所以試試這個。

class PowerUpBooleans{ 
    var boolean: Bool { 
    didSet { 
     trigger() 
    } 
    } 
    var trigger:() ->() 

    init(boolean: Bool, trigger: @escaping() ->()){ 
    self.boolean = boolean 
    self.trigger = trigger 
    } 
} 

let trigger1 = { 
    print("one worked.") 
} 
let trigger2 = { 
    print("two worked.") 
} 

var powerUpBooleans = [PowerUpBooleans]() 
powerUpBooleans.append(PowerUpBooleans(boolean: false, trigger: trigger1)) 
powerUpBooleans.append(PowerUpBooleans(boolean: false, trigger: trigger2)) 
powerUpBooleans[0].boolean = true // print one worked 
powerUpBooleans[1].boolean = false // print two worked 
+0

這就是答案 – WMios

+0

Thx哥們它的工作原理 – NoKey