如何解决如何从 Kotlin 移动平台访问 Array 到 iOS 或 Android?
我正在尝试在 KMM 应用程序中创建冒泡排序。现在 KMM func 从本机端获取参数并将其与应用程序的 KMM 端通信,并且应该将排序后的数组返回到本机端。 现在,我心中几乎没有怀疑了。
- 我是否正确地在 swift 中声明了 kotlinArray?如果我尝试将它指定为普通的 swift 数组,它就无法转换为 Kotlin 数组并给我转换错误。所以这是我想出来的。那么,这是从 swift 与 KotlinArray 通信的正确方式吗?
-
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
}
}
输出截图:
任何帮助将不胜感激。
解决方法
“垃圾值”是该类型的默认 toString,或者可能是数组的包装类型。在任何情况下,它说的是“kotlin.IntArray”,它是类型,而“@_____”,它是 id 或指针值(不确定)。无论如何,这显然不是值列表。要打印它,您应该编写一个为您打印它的函数。
KMM 来回转换 List 和 Swift 数组。 Kotlin 数组不会被转换,并且是 Swift 可以与之交互的简单对象类型,因此上面的示例看起来不错。只是你没有正确打印它。
不过,我不知道您的排序代码是否正确。
我要指出的是,您正在修改传入的数组并返回它,这将导致您的输出不正确。在您打印 array
和 sortedArray
时,它们将是相同的值。它们都会被排序。
我建议您使用 ArrayList<Int>
而不是 KotlinIntArray
。默认情况下,写入 ArrayList<Int>
会将其转换为 NSMutableArray
中的 swift
。
示例:-
你需要在你的共享模块中有这个:-
fun sortArray(array: ArrayList<Int>) : ArrayList<Int> {
// Your Swap logic here
return array
}
然后在你的 swift 代码中你可以有这个:-
let array = NSMutableArray()
array.add(2)
array.add(5)
array.add(1)
array.add(7)
print("\(Greeting().sortArray(array: array))")
您的输出将是这样的:-
(2,5,1,7)
这样你就不需要编写单独的函数来一一获取数组元素了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。