你好我对没有Objective-C背景的Swift开发真的很新,虽然我在java中有很强的基础知识,但swift对我来说有一个非常僵硬的学习曲线,我会直接回答我的问题,但生病了代码第一
class Vehicle {
var gear : String {
get {
return self.gear
}
set {
self.gear = newValue
}
}
}
var vehicle = Vehicle()
vehicle.gear = "ADASD"
我有编译错误说
./run-swift: line 18: 30295 Segmentation fault: 11 gtimeout -k $TIMEOUT_KILL_AFTER $TIMEOUT_DURATION $SWIFT_COMPILER -target $TARGET -sdk $SDK $OPTIMIZATION_LEVEL $INPUT_FILE -o $OUTPUT_FILE
我真的不明白为什么这个简单的代码不能使用String类型进行编译,如果我将变量声明更改为Int类型并为其属性赋值,我就没有任何问题。
答案 0 :(得分:3)
self.gear
在此调用gear
的getter调用self.gear
。你创造了一个无限循环。你有一个类似的设置者的情况。如果您只想存储房产,则无需实施get
和set
。
final class Vehicle {
var gear : String
}
var vehicle = Vehicle()
vehicle.gear = "ADASD"
答案 1 :(得分:1)
computed property
只是一些后备存储变量的前门,在您的情况下,正确的方法是首先声明stored variables
,并使用computed property
的{{1}}来访问它
get set method
首先声明为class Vehicle {
private var _gear : String = ""
var gear : String {
get {
return _gear
}
set {
_gear = newValue
}
}
}
var vehicle = Vehicle()
vehicle.gear = "ADASD"
时没有崩溃的原因是它没有足够的时间让它溢出,我尝试了它并且我花了一段时间才得到这个错误