在 swift 3 xcode 8 中出现错误
Posted
技术标签:
【中文标题】在 swift 3 xcode 8 中出现错误【英文标题】:Getting error's in swift 3 xcode 8 【发布时间】:2016-10-05 06:48:59 【问题描述】:我已在 Xcode 中将旧的 Swift 代码转换为新的 Swift3。现在它在我的 Swift 文件中显示这些错误:
self.detailViewController = controllers[controllers.count- 1].topViewController as? DetailViewController
错误:
“UIViewController”类型的值没有成员“topViewController”
let sortedTimes = sorted(times!)a,b in a.0.rawValue < b.0.rawValue
错误:
'sorted' 不可用:在集合上调用 sort() 方法
【问题讨论】:
试试这个 self.detailViewController = (controllers[controllers.count-1] as! UINavigationController).topViewController as? DetailViewController 【参考方案1】:第一个可能是您的UINavigationController
被放入UIViewController
s 的集合中。你需要让编译器知道它确实是一个UINavigationController
。
self.detailViewController = (controllers[controllers.count - 1] as? UINavigationController)?.topViewController as? DetailViewController
第二个是sorted
函数现在变成了实例方法。
let sortedTimes = times!.sorted $0.0.rawValue < $1.0.rawValue
【讨论】:
第二个修复程序消除了错误,但接下来的几行给了我一个错误,任何想法 todayTimes = sortedTimes tableView.reloadData(sorted) 您在@sabrefm1 的下一行遇到什么错误?【参考方案2】:使用这条线,
let sortedTimes = times.sort(a,b in a.0.rawValue < b.0.rawValue)
希望这会对你有所帮助。
【讨论】:
【参考方案3】: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
)。
【讨论】:
技术上说 Swift 3 是类型安全的并没有错。然而,AFAIK,Swift 一直是类型安全的。 第一个答案是正确的,但我在第二次调用 sort() 方法时似乎仍然出错以上是关于在 swift 3 xcode 8 中出现错误的主要内容,如果未能解决你的问题,请参考以下文章
SDWebImage 库在 swift 3 Xcode 8.0 中出现错误
UITextViewDelegate 方法在 Swift 3 和 Xcode 8.0 中给出“使用未声明的类型 URL”错误