我正在尝试将此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”
答案 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}}