You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin多平台中如何正确初始化NSOrderedSet?

解决Kotlin iOS中NSOrderedSet初始化错误的方案

在Kotlin/Native iOS环境下,NSOrderedSet没有直接接收Kotlin List的构造方法,必须先把排序后的集合转换为NSArray,再传入NSOrderedSet的对应构造函数。

修正后的完整代码:

import platform.Foundation.NSOrderedSet
import platform.Foundation.NSArray
import platform.Foundation.arrayWithArray

class IOSSortedSet<T>(private val list: NSOrderedSet) : SortedSet<T> {

    constructor(
        comparator: Comparator<in T>,
        collection: Iterable<T>
    ) : this(NSOrderedSet(array = NSArray.arrayWithArray(collection.sortedWith(comparator).toList())))
}

核心修正点:

  • 先通过collection.sortedWith(comparator).toList()生成排序后的Kotlin List
  • 用NSArray.arrayWithArray()将Kotlin List转换为iOS原生的NSArray
  • 调用NSOrderedSet接收NSArray参数的构造函数完成初始化

如果你的Kotlin版本支持toNSArray()扩展函数,也可以用更简洁的写法:

class IOSSortedSet<T>(private val list: NSOrderedSet) : SortedSet<T> {

    constructor(
        comparator: Comparator<in T>,
        collection: Iterable<T>
    ) : this(NSOrderedSet(array = collection.sortedWith(comparator).toList().toNSArray()))
}

内容的提问来源于stack exchange,提问作者Romit Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 00:24:25