Swift3:不是预期的上下文结果类型NSArray

Swift3:不是预期的上下文结果类型NSArray,swift3,nsarray,nssortdescriptor,Swift3,Nsarray,Nssortdescriptor,我正在将我的代码从Swift 2.3迁移到Swift 3。在迁移后工作正常之前,我面临的不是预期的上下文结果类型NSArray 这是我的密码 func setConfirmedBookingsAfterSorting() { if let bookings = ContentService.sharedInstance.confirmedBookings { self.confirmedBookings = (bookings as NSArray).s

我正在将我的代码从Swift 2.3迁移到Swift 3。在迁移后工作正常之前,我面临的不是预期的上下文结果类型NSArray 这是我的密码

func setConfirmedBookingsAfterSorting() {
        if let bookings =  ContentService.sharedInstance.confirmedBookings {
            self.confirmedBookings = (bookings as NSArray).sortedArray(using: [NSSortDescriptor(key: "startTime", ascending: true)])
        }
    }

所用方法的声明类型为
func-sortedArray(使用sortDescriptors:[NSSortDescriptor])->[Any]
,这意味着结果将隐式转换为Swift数组

试试这个:

((bookings as NSArray).sortedArray(using: [NSSortDescriptor(key: "startTime", ascending: true)])) as NSArray

这会阻止转换,并将结果维护为
NSArray
Objective C对象。

为什么不使用Swift的原生排序<代码>预订。排序{$0.startTime<$1.startTime}这看起来显然比:你能描述优点吗?@greybeard-这是对问题中代码的最小修改,而不是一些人可能更喜欢的评论中的建议。具体来说,它不需要更改任何声明的类型,也不需要更改从返回已排序副本到就地排序的行为。@brimstone-所用方法的声明类型是
func-sortedArray(使用sortDescriptors:[NSSortDescriptor])->[any]
,这意味着结果将隐式转换为Swift数组。这会阻止转换,并将结果作为
NSArray
Objective C对象进行维护。