我一直在關注一個教程以添加爲Swift 2編寫的自定義轉換:但我的自定義轉換不會替換現有的轉換。更改爲Swift 3的UIViewControllerTransitioningDelegate定義可防止轉換
1
A
回答
7
對於Swift 3,在代理定義中使用animationController(forPresented:
而不是animationControllerForPresented (
非常重要。
extension DataViewController: UIViewControllerTransitioningDelegate {
func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return PresentMenuAnimator() //your replacement
}
}
否則你的建議動畫師會被忽略。
這不是由Xcode中的自動更正代碼標記的。
1
此問題是由Swift 3 rename化引起的。特別是,Clang導入程序在使用可選的協議方法時遇到了問題:編譯程序並不總是將您的舊聲明與新的已重新聲明的聲明進行匹配。因此,你的方法變成了一個永遠不會被調用的無用函數:你不會從編譯器得到關於這個問題的任何警告,因爲你沒有正確實現的方法是可選的,但是在運行時,Objective-C沒有看到你的聲明函數作爲它正在查找的方法,所以它不會調用它。
這裏有一些提示我已經開發了注意和解決這個問題:
總是讓你申報的延伸明確採用的協議。編譯器將當然如果你不這樣做,看不到你的方法。 (我認爲這是Swift中的一個bug,並已將其提交。)
將選定內容放入函數名稱中,然後查看右側的快速幫助檢查器。如果你沒有看到幫助 - 也就是說,如果你看到的只是你的函數聲明 - 你沒有正確地匹配委託函數。
看看文檔!在這種情況下,https://developer.apple.com/reference/uikit/uiviewcontrollertransitioningdelegate顯示重新整理的簽名。標題也是如此:只需單擊命令,單擊UIViewControllerTransitioningDelegate就會向您顯示它們。
如有疑問,請使用
@objc(...)
屬性將方法的Objective-C名稱粘貼在您的前面。這允許Objective-C看到你的方法。這是一個暫時的權宜之計,但至少它會讓你的代碼再次運行。
相關問題
- 1. 轉換爲Swift 3
- 2. Swift 3中的自定義轉換不能正確轉換
- 3. Swift 3轉換
- 4. 防止JSON.Net自定義轉換器轉換子對象
- 5. Swift 3更改爲NSErrorPointer?
- 6. 防止json.dumps轉換爲unicode
- 7. 仿射轉換可防止CGPoint轉移
- 8. 防止更改爲動畫
- 9. 防止gettext轉換
- 10. 更厚的行防止轉換
- 11. HttpErrors existingResponse =「替換」可防止MVC的自定義錯誤處理
- 12. Swift:'()'不可轉換爲'[String:AnyObject]'
- 13. 更改父元素的位置可防止Firefox中的子元素CSS3轉換
- 14. 如何防止將decimal.TryParse轉換爲「。」爲「。」?
- 15. 如何防止更改後旋轉jquerymobile
- 16. 與轉換SWIFT 2.3 SWIFT的3
- 17. 自定義UICollectionViewCell類:如何更改Swift中的高度3
- 18. Symfony 1.4:是否有可能防止轉義URL的轉義?
- 19. 在Swift中爲自定義類型定義顯式轉換
- 20. 在Swift 3中將NSData轉換爲NSString?
- 21. 將Swift 3數組轉換爲JSON
- 22. 將字符轉換爲int - swift 3
- 23. ReactiveCocoa:Xcode問我轉換爲swift 3
- 24. 將UIView轉換爲UIImage Swift 3
- 25. Swift 3將Double轉換爲字符串
- 26. 將Objective-C語法轉換爲Swift 3
- 27. Swift 3:如何將[String:AnyObject]轉換爲[String:String]?
- 28. 如何將URL轉換爲NSImage(Swift 3)
- 29. 將C#JSON POST轉換爲SWIFT 3
- 30. 將字符串轉換爲NSObject Swift 3
如果編譯器沒有標記您的方法簽名是錯誤的(對於Swift 3),您應該提交錯誤報告。 – matt
我會這樣做的 –