如何将此代码从iOS Swift转换为Android Kotlin

我试图将此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”

如果您必须使用CGFloat ,则必须直接构建一个。 你不能只给它分配一个原始类型,Kotlin无法理解这一点。

  val kCORNER_RADIUS_BUTTON: CGFloat = CGFloat(4.0) 

然而,因为你的CGFloat类没有做任何Double尚未做的事情,所以我建议使用它。 看起来你有要求(我会推回去)正确地移植,忽略你正在移植的语言的约定。 在这种情况下,我只需将Doubleal输入到CGFloat即可。

 typelias CGFloat = Double 

那么你可以在任何你想要的地方使用它:

 fun doSomething(foo: CGFloat): CGFloat { ... }