更新到 Kotlin 1.4.10 后 KotlinPair 出现问题

Issue with KotlinPair after updating to Kotlin 1.4.10

我将 Kotlin Multiplatform 项目从 Kotlin 1.3.72 更新到 1.4.10,当我尝试构建代码时遇到如下问题:

当我在没有更新到 kotlin 1.4.10 的情况下回滚到分支时,一切正常。

代码:

commonMain.kt

interface LocationView {
var location: Pair<Latitude, Longitude>?

fun setOnSavingLocationPermissionProceedAction(action: () -> Unit)
fun setOnSavingLocationPermissionSkipAction(action: () -> Unit)
fun setOnSavingLocationPermissionAllowAction(action: (Pair<Latitude, Longitude>?) -> Unit)
fun setOnSavingLocationPermissionDenyAction(action: () -> Unit)
}

LatitudeCommon.kt

inline class Latitude(val value: Double)

LongitudeCommon.kt

inline class Longitude(val value: Double)

LocationStepCardView.swift

import kotlinProjectCommon

extension LocationStepCardView: LocationView {

var location: KotlinPair? {
    get { currentLocation as? KotlinPair }
    set { currentLocation = newValue }
}

func setOnSavingLocationPermissionProceedAction(action: @escaping () -> Void) {
    proceedAction = action
}

func setOnSavingLocationPermissionSkipAction(action: @escaping () -> Void) {
    skipAction = action
}

func setOnSavingLocationPermissionAllowAction(action: @escaping (KotlinPair?) -> Void) {
    onLocationUpdateAction = { (latitude: Double, longitude: Double) in
        let pair = KotlinPair(first: latitude, second: longitude)
        action(pair)
    }
}

func setOnSavingLocationPermissionDenyAction(action: @escaping () -> Void) {
    onDeniedLocationAction = action
}
}

我猜是因为 Objective-C 现在默认启用泛型。您可以使用 -Xno-objc-generics.

禁用它们

https://kotlinlang.org/docs/reference/native/objc_interop.html#generics

至于“需要是 class 类型”,我认为这意味着您需要显式转换为 KotlinDouble。禁用泛型 可能 恢复该问题,但 YMMV。