【发布时间】:2017-06-09 14:33:40
【问题描述】:
我正在尝试将此 Swift 代码转换为 Kotlin Android 并遇到问题。
Swift code:
public let kCORNER_RADIUS_BUTTON: CGFloat = 4.0
我已经转换了我在下面找到的 CGFloat java 类
/**
* CGFloat
* @author [Harald Kuhr](mailto:harald.kuhr@gmail.com)
* *
* @author duncan
*/
class CGFloat : Number {
private val value: Double
constructor() {
value = 0.0
}
constructor(d: Double) {
value = d
}
override fun toByte(): Byte {
return value.toByte()
}
override fun toChar(): Char {
return value.toChar()
}
override fun toDouble(): Double {
return value
}
override fun toFloat(): Float {
return value.toFloat()
}
override fun toInt(): Int {
return value.toInt()
}
override fun toLong(): Long {
return value.toLong()
}
override fun toShort(): Short {
return value.toShort()
}
override fun hashCode(): Int {
// From Double.hashCode
val bits = java.lang.Double.doubleToLongBits(value)
return (bits xor bits.ushr(32)).toInt()
}
override fun equals(other: Any?): Boolean {
// Modified Double.equals
return other is CGFloat && java.lang.Double.doubleToLongBits(other.value) == java.lang.Double.doubleToLongBits(value)
}
override fun toString(): String {
return value.toString()
}
companion object {
// Inspired by JNA NativeLong and IntegerType
val SIZE = Integer.MAX_VALUE
}
}
在 Kotlin 代码中我这样做
public val kCORNER_RADIUS_BUTTON: CGFloat = 4.0
但收到错误消息“浮点文字不符合预期的 CGFloat 类型”
【问题讨论】:
-
为什么不直接使用
Double?此外,您不能将文字分配给这样的类型。你必须这样做CGFloat(4.0d)。 -
我不能。我必须严格遵守 Swift 代码。尝试了 public val kCORNER_RADIUS_BUTTON: CGFloat(4.0d) now getting "property getter and setter expected" 错误
-
在操作系统之间移植时,这似乎是一个相当严格和不必要的要求。你的
CGFloat类只是在模仿Double,那么为什么不输入别名呢?typealias CGFloat = Double。然后您可以将其称为CGFloat(如果必须)并直接使用Double,而无需维护无用的包装器。 -
谢谢。我会尝试类型别名。我不是 Swift 开发人员,所以这对我来说是全新的。最后一个问题:如何设置 typealias 以在 kotlin 项目中全局使用?
-
你可能想看看这个比较:nilhcem.com/swift-is-like-kotlin
标签: java android ios swift kotlin