Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Kotlin:相当于Swift的属性包装器_Java_Swift_Kotlin - Fatal编程技术网

Java Kotlin:相当于Swift的属性包装器

Java Kotlin:相当于Swift的属性包装器,java,swift,kotlin,Java,Swift,Kotlin,Kotlin的等效属性包装是什么: @propertyWrapper struct Foo { var wrappedValue: String { get { return "Test } } } @Foo-var-test:String在Kotlin中,有多个选项用于向属性添加自定义行为。基本上有两个选项:自定义setter/getter和 在Kotlin,有些事情可能会有所不同: 属性是val或varval类似

Kotlin的等效属性包装是什么:

@propertyWrapper
struct Foo {

    var wrappedValue: String {
        get {
            return "Test
        }
    }

}

@Foo-var-test:String

在Kotlin中,有多个选项用于向属性添加自定义行为。基本上有两个选项:自定义setter/getter和

在Kotlin,有些事情可能会有所不同:

  • 属性是
    val
    var
    val
    类似于Java中的
    final
    ,只能分配一次,
    var
    可以重新分配

  • 这两种类型都可以有自定义的getter
    var
    s可以有自定义设置器

  • 如果您想要一个支持字段,Kotlin会为您提供一个支持字段。只需在setter或getter中使用关键字
    字段

  • Kotlin属性没有隐式默认值。必须在构造函数中(或通过
    init
    块)或
    =
    后的声明中进行初始化

  • 有些属性实际上是经过计算的,实际上不存储任何内容。在这种情况下,没有支持
    字段
    ,也不需要(或允许)初始值设定项

例如:

class Dog {
    // Must have initial value, default getter and setter. Value can come from constructor.
    val isNice: Boolean = true 
        set(value) { ... } // This produces an error, no setters on vals

    // Must have initial value, default getter
    var age: Int = 0 
        set(value) { if (value >= 0) field = value }

    // Value is just computed, has no field and cannot have initial value
    var ageInDogYears: Int 
        get() = age * 7
        set(value) { age = value / 7 }
}

我不知道答案,但这个问题表明,您正在尝试将Swift应用程序移植到Kotlin,方法是将Swift术语替换为Kotlin术语。如果是这样的话,你会过得很艰难。你最终会得到糟糕的psuedo-Swift-Kotlin代码,它既不像它的Swift对应物(现在),也不是任何其他Kotlin开发人员都能识别或想要使用的好Kotlin代码。我还没有学会Swift,但快速浏览一下关于Swift属性包装器的教程,我觉得它们与Kotlin非常相似。但是,属性包装器的一些简单功能也可以在Kotlin中直接使用自定义getter和setter完成。