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

时间:2017-06-09 14:33:40

标签: java android ios swift 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”

1 个答案:

答案 0 :(得分:2)

如果您必须使用CGFloat,那么您必须直接构建一个 val kCORNER_RADIUS_BUTTON: CGFloat = CGFloat(4.0) 。你不能只为它分配原始类型,Kotlin无法理解它。

CGFloat

但是,由于您的Double课程没有执行typelias CGFloat = Double 尚未执行的操作,我建议您使用该课程。看起来你有要求(我会继续推进)完全移植它,忽略你移植到的语言的约定。在这种情况下,我只需要将Calloal的字符串设为Double。

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

然后您可以在任何地方使用它:

{{1}}