2016-10-05 3 views
1

Xcode에서 오래된 Swift 코드를 새로운 Swift3으로 변환했습니다. 지금은 내 스위프트 파일에 이러한 오류를 보여주고있다 :신속한 오류 발생 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} 

이 없습니다 오류 :

'분류'

을 사용할 수 없습니다 : 당신의 UINavigationControllerUIViewController의 컬렉션에 넣어되어있을 수 컬렉션

+0

시도해보십시오. self.detailViewController = (컨트롤러 [controllers.count-1]!! UINavigationController) .topViewController as? DetailViewController –

답변

0

첫 번째에 정렬() 메서드를 호출합니다. 컴파일러가 실제로는 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 – sabrefm1

+0

@ sabrefm1 행에서 발생하는 오류는 무엇입니까? –

0

스위프트는 컴파일시에 수행되는 type safety 기능을 가지고 있습니다. controllers[controllers.count - 1UINavigationController이어야합니다. 그래서 당신은 그것을 적절하게 던져야합니다.

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)}) 

당신은 당신의 지정된 유형 ({a,b in (a as AnyObject).rawValue < b.0.rawValue})에 as! 내리 뜬을 업데이트 할 수 있습니다.

+0

기술적으로 스위프트 3는 유형 안전하다고 말하기는 어렵지 않습니다. 그러나 AFAIK, Swift는 항상 유형 안전성이 있습니다. –

+0

나는 정정했다. – pkc456

+0

첫 번째 대답은 정확하지만 두 번째 오류가 계속 나타나는 것 같습니다. sort() 메서드를 호출하십시오. – sabrefm1

0

사용이 줄이 당신을 도울 것입니다

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

희망.

관련 문제