Swiftling在斯威夫特4不再有效。方法在swift 4迅速4
Method 'initialize()' defines Objective-C class method 'initialize', which is not permitted by Swift
這是我已經找到了解決方案,所以想離開的問題和回答別人。
Swiftling在斯威夫特4不再有效。方法在swift 4迅速4
Method 'initialize()' defines Objective-C class method 'initialize', which is not permitted by Swift
這是我已經找到了解決方案,所以想離開的問題和回答別人。
初始化()不再暴露:Method 'initialize()' defines Objective-C class method 'initialize', which is not permitted by Swift
所以這樣做,現在是通過公共靜態方法來運行你的調酒代碼。
例如
在擴展名: (此擴展用於在動工開放源碼:https://github.com/kickstarter/ios-oss/blob/master/Library/DataSource/UIView-Extensions.swift)
private var hasSwizzled = false
extension UIView {
final public class func doBadSwizzleStuff() {
guard !hasSwizzled else { return }
hasSwizzled = true
swizzle(self) /* This is pseudo - run your method here */
}
}
在應用程序委託: (此方法是在動工打開用於源代碼:https://github.com/kickstarter/ios-oss/blob/7c827770813e25cc7f79a28fa151cd713efe936f/Kickstarter-iOS/AppDelegate.swift#L33)
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: UIApplicationLaunchOptionsKey: Any]?) -> Bool
{
UIView.doBadSwizzleStuff()
}
另一種方法是使用一個單例:如果你有機會到AppDelegate的源代碼
extension UIView {
static let shared : UIViewController = {
$0.initialize()
return $0
}(UIViewController())
func initialize() {
// make sure this isn't a subclass
guard self === UIViewController.self else { return }
let swizzleClosure:() = {
UIViewController().swizzle() /* This is pseudo - run your method here */
}()
swizzleClosure
}
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: UIApplicationLaunchOptionsKey: Any]?) -> Bool
{
_ = UIViewController.shared
}
這僅適用。我正在編寫一個庫,並希望利用Swizzling在ViewController的「viewDidLoad」塊中運行特定的方法。我試圖讓我的庫儘可能容易地讓客戶實現,雖然我可以讓他們向AppDelegate添加代碼,但如果可能的話,我寧願使用Swizzling(如果需要,可以選擇禁用它)。任何關於這個獲得「AppDelegate-free」Swift在Swift 4.0中工作的想法?謝謝! Craig – CPR
我看到了一些代碼(我不記得鏈接,如果我再次發現會發布)。但他們否認UIResponder我認爲,然後從那裏調用doBadSwizzle()方法,允許他們沒有訪問AppDelegate的工作。 我不確定具體的實施細節了 –
我想你是指這個職位:http://jordansmith.io/handling-the-deprecation-of-initialize/。我正在他的博客上與喬丹進行討論,所以如果您有任何補充,請隨時加入。謝謝! – CPR