0

您好,我对没有 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 类型并为其属性赋值,我完全没有问题。

4

2 回答 2

3

self.geargear这里调用了调用的 getter self.gear。您已经创建了一个无限循环。二传手也有类似的情况。你不需要实现getset如果你只想存储一个属性。

final class Vehicle {
    var gear : String
}

var vehicle = Vehicle()
vehicle.gear = "ADASD"
于 2016-02-29T03:57:08.197 回答
1

Rob 回答的一些补充:

computed property只是一些支持存储变量的前门,在您的情况下,正确的方法是stored variables首先声明,然后使用computed property'sget set method访问它

class Vehicle {
    private var _gear : String = ""
    var gear : String {
        get {
            return _gear
        }
        set {
            _gear = newValue
        }
    }
}
var vehicle = Vehicle()
vehicle.gear = "ADASD"

首先声明它没有崩溃的原因Int是它没有足够的时间让它溢出,我试过了,我花了一段时间才得到这个错误 在此处输入图像描述

于 2016-02-29T04:04:08.167 回答