Ond*_*čík 2 java android ios kotlin swift
我不确定自己的头衔是否明确。在Swift中,我有这个结构。
struct Movement {
let name: String
var reps: Int
}
let movement1 = Movement(name: "Push Ups", reps: 20)
var movementA = movement1
movementA.reps = 30
print(movement1.reps) // Prints 20
print(movementA.reps) // Prints 30
Run Code Online (Sandbox Code Playgroud)
Kotlin(或Java)中的替代方法是什么?问题是在我的应用程序中,我的锻炼包含多个动作。我将这些动作附加到MutableList上,并且在进行重复动作的锻炼时出现问题。
例如,当我想输入锻炼内容时:
20俯卧撑
30个引体向上
40俯卧撑
我最终得到:
40俯卧撑
30个引体向上
40俯卧撑
首先,我选择运动#1并设置运动#1的代表,但是当我选择运动#3并设置运动#3的代表时,它将覆盖运动#1的变量。
任何的想法?
我已经尝试过类似的方法,但是没有用。
class Movement(name: String) {
var reps: Int? = null
}
val movement1 = Movement("Push Ups")
movement1.reps = 20
var movementA = movement1
movementA.reps = 30
Log.i("REPS1: ", movement1.reps.toString()) // 30
Log.i("REPSA: ", movementA.reps.toString()) // 30
Run Code Online (Sandbox Code Playgroud)
我从未使用过Swift,但是似乎您有一个可变的值,当您将其分配给新变量时,该值会被复制。在Kotlin中,您不能有这种类型。当给新变量赋值时,仅引用被复制,并且仍指向相同的确切存储位置。
您可以使用为您提供方便的复制方法的数据类:
data class Movement(val name: String, val reps: Int)
val movement1 = Movement("Push Ups", 20)
val movementA = movement1.copy(reps = 30)
Run Code Online (Sandbox Code Playgroud)
movement1首先,让我解释为什么和具有相同的值movementA。当您在 Kotlin 中赋值时,您复制的是引用,而不是类。
var movementA = movement1
Run Code Online (Sandbox Code Playgroud)
因此,它的作用是创建一个名为 的新变量,并将其指向所指向的movementA完全相同的对象。movement1
我想您可能想看看数据类。它们带有一个可能会派上用场的复制构造函数。
data class Movement(val name: String, val reps: Int)
Run Code Online (Sandbox Code Playgroud)
然后您可以相互创建它们,就像上面显示的 swift 代码一样。
val movement1 = Movement("Push-Ups", 20)
val movementA = movement1.copy(reps = 30)
Run Code Online (Sandbox Code Playgroud)
或者你可以使用属性vars 而不是vals 并直接改变它们......
data class Movement(var name: String, var reps: Int)
var movement1 = Movement("Push-Ups", 20)
var movementA = movement1.copy()
movementA.reps = 30
Run Code Online (Sandbox Code Playgroud)