我有一个汽车课。让我们说一辆车去垃圾场,这辆车应该不再算在总人口中了。我有deinit功能,但我如何系统地从汽车人口中删除汽车?换句话说,我如何让deinit生效?
我有一个类变量class Car {
static var population: Int = 0
var isJunk: Bool = false
var color: String
var capacity: Int
var driver: Bool?
var carOn: Bool = false
init (carColor: String, carCapacity: Int) {
self.capacity = carCapacity
self.color = carColor
Car.population += 1
}
deinit {
Car.population -= 1
}
func startCar() {
self.carOn = true
}
}
,但不知道如何使用它来完成这项工作。
$(".accordion-content-container").hide();
$('.accordion-trigger').click(function() {
//Expand or collapse this panel
$(this).next().slideToggle('fast');
$(this).find('span').toggleClass('fa-minus');
//Hide the other panels
$(".accordion-content-container").not($(this).next()).slideUp('fast');
// remove classes 'fa-minus' unless its part of the accordion being triggered
$('span').removeClass('fa-minus');
$(this).find('span').addClass('fa-minus');
});
答案 0 :(得分:5)
class Car {
static var population: Int = 0
init() {
Car.population += 1
}
deinit {
Car.population -= 1
}
}
var cars: [Car] = [Car(), Car()]
print("Population:", Car.population) // "Population: 2"
// now the second car is removed from array and we have no other references to it
// it gets removed from memory and deinit is called
cars.removeLast()
print("Population:", Car.population) // "Population: 1"
但是,只需询问cars
数组中的项目数即可实现同样的效果。而且这通常是一个更好的替代方案,而不是私人的实例反击。
要将项目保留在内存中,您将始终需要某种寄存器(例如数组)。那个登记册可以让他们计算在内。
一种可能性:
class CarPopulation {
var liveCars: [Car] = []
var junkCars: [Car] = []
}
或者您可以将它们保存在一个阵列中并在车上设置junk
并在需要时计算非垃圾车:
class CarPopulation {
var cars: [Car] = []
func liveCars() -> Int {
return self.cars.filter { !$0.junk }.count
}
}
有许多可能性,但将计数器提取到拥有汽车的其他类别可能是一个更好的解决方案。
答案 1 :(得分:1)
当您释放http://web.docker
的实例时(当您完全摆脱对象的实例时),将调用deinit
。当你在垃圾场放置一个Car
实例时,我认为你不想摆脱Car
的实例,你真的只想改变它的位置。我建议使用不同的函数来处理Car
的位置。
也许:
Car