在swift中获取错误3 xcode 8

问题描述:

我已经将旧的Swift代码转换为Xcode中的新Swift3。现在,它正显示出这些错误在我的雨燕文件:在swift中获取错误3 xcode 8

self.detailViewController = controllers[controllers.count- 1].topViewController as? DetailViewController 

错误:类型的UIViewController“的

值没有任何成员 'topViewController'

let sortedTimes = sorted(times!){a,b in a.0.rawValue < b.0.rawValue} 

错误

“排序”是不可用:呼吁收集

+0

试试这个self.detailViewController =(controllers [controllers.count-1] as!UINavigationController).topViewController as? DetailViewController –

第一个排序()方法可能是您的UINavigationController放的UIViewController个收藏。你需要让编译器知道它确实是UINavigationController

self.detailViewController = (controllers[controllers.count - 1] as? UINavigationController)?.topViewController as? DetailViewController 

第二个是sorted函数现在已经成为一个实例方法。

let sortedTimes = times!.sorted { $0.0.rawValue < $1.0.rawValue } 
+0

第二个修复带走了错误,但接着下一行给了我一个错误任何想法 todayTimes = sortedTimes tableView.reloadData(sorted) – sabrefm1

+0

你在下一行@ sabrefm1上得到的错误是什么? –

Swift的type safety功能在编译时完成。 controllers[controllers.count - 1必须是UINavigationController类型。所以你必须相应地施放它。

self.detailViewController = (controllers[controllers.count - 1] as? UINavigationController)?.topViewController as? DetailViewController 

假设集合(数组)包含int值。

let times : NSArray = [1,2,3,4] 
let sortedTimes = times.sorted(by: {a,b in (a as! Int) < (b as! Int)}) 

您可以更新as!低垂到你指定的类型({a,b in (a as AnyObject).rawValue < b.0.rawValue})。

+0

从技术上讲,Swift 3是类型安全的并不是错误的。但是,AFAIK,Swift一直是类型安全的。 –

+0

我做了更正。 – pkc456

+0

第一个答案是正确的,但我仍然看到第二个错误 调用sort()方法 – sabrefm1

使用这条线,

let sortedTimes = times.sort({a,b in a.0.rawValue < b.0.rawValue}) 

希望这会帮助你。