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
相关产品推荐
相关产品推荐

