Swift - 计算属性的Getter和Setter作为字符串类型

时间:2016-02-29 03:53:54

标签: swift getter-setter computed-properties

你好我对没有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类型并为其属性赋值,我就没有任何问题。

2 个答案:

答案 0 :(得分:3)

self.gear在此调用gear的getter调用self.gear。你创造了一个无限循环。你有一个类似的设置者的情况。如果您只想存储房产,则无需实施getset

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" 时没有崩溃的原因是它没有足够的时间让它溢出,我尝试了它并且我花了一段时间才得到这个错误 enter image description here