1

我正在尝试在 KMM 应用程序中创建冒泡排序。现在 KMM func 从本机端获取参数并与应用程序的 KMM 端进行通信,并且应该将排序后的数组返回到本机端。现在,我心中几乎没有怀疑。

  1. 我是否正确地在 swift 中声明了 kotlinArray?如果我尝试将它指定为普通的 swift 数组,它就无法转换为 Kotlin 数组并给我转换错误。所以这是我想出的。那么这是从 swift 与 KotlinArray 进行通信的正确方法吗?
  2. fun bubbleSort当我尝试在本机项目上运行它时效果很好。但是当我试图运行 KMM 项目时,它只是给了我一个垃圾值。那么任何人都可以帮助我了解如何实现这一点吗?

以下是我的源代码。

SourceCode for ContentView.swift:

func greet() -> String {
    
    let array = KotlinIntArray(size: 5)
    array.set(index: 0, value: 2)
    array.set(index: 1, value: 15)
    array.set(index: 2, value: 1)
    array.set(index: 3, value: 8)
    array.set(index: 4, value: 4)
    let sortedArray = Greeting().bubbleSort(arr:array)

    print("Entered Array :\(array)"). //output: Entered Array :kotlin.IntArray@187bd58

    print("Sorted Array :\(sortedArray)") //Output: Sorted Array :kotlin.IntArray@187bd58
    
    return Greeting().greeting()
    
}
SourceCode for Greetings.kt:
package com.example.kmm_perofomance.shared


class Greeting {
    fun greeting(): String {
        return "Hello, ${Platform().platform}!"
    }

     fun bubbleSort(arr:IntArray):IntArray{
         for (i in 1..arr.count()) {
           for (j in 1..arr.count() - i) {
               if( arr[j] < arr[j-1]) {
                   var temp = arr[j-1]
                   arr[j-1] = arr[j]
                   arr[j] = temp
               }
           }
       }
        return arr
    }
}

输出截图: 输出截图:

任何帮助将非常感激。

4

2 回答 2

3

“垃圾值”是该类型的默认 toString,或者可能是数组的包装类型。无论如何,它所说的是“kotlin.IntArray”,它是类型,以及“@_____”,它是 id 或指针值(不确定)。无论如何,它显然不是值列表。要打印它,您应该编写一个为您打印它的函数。

KMM 来回转换 List 和 Swift 数组。Kotlin 数组没有被转换并且是 Swift 可以与之交互的简单对象类型,所以你上面的例子看起来不错。只是你没有正确打印它。

不过,我不知道您的排序代码是否正确。

我要指出的是,您正在修改传入的数组并返回它,这将导致您的输出不正确。在您打印arraysortedArray时,它们将具有相同的值。他们都会被排序。

于 2021-02-17T14:16:55.063 回答
1

我建议您使用ArrayList<Int>而不是使用KotlinIntArray. 默认情况下,写作ArrayList<Int>会将其转换为NSMutableArrayin swift

例子 :-

你需要在你的共享模块中有这个:-

fun sortArray(array: ArrayList<Int>) : ArrayList<Int> {
    // Your Swap logic here
    return array
}

然后在您的快速代码中,您可以拥有以下内容:-

let array = NSMutableArray()
    array.add(2)
    array.add(5)
    array.add(1)
    array.add(7)
    print("\(Greeting().sortArray(array: array))")

您的输出将是这样的:-

(2, 5, 1, 7)

从此,您无需编写单独的函数来逐个获取数组元素。

于 2021-02-18T11:21:08.363 回答