如何将此代码从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 { ... }