2.x → 3 ほどの大きな変更はないと思うが、気付いた点があったら追記していく。
@objc推論の廃止
Dependency Analysis Warning
The use of Swift 3 @objc inference in Swift 4 mode is deprecated. Please address deprecated @objc inference warnings, test your code with “Use of deprecated Swift 3 @objc inference” logging enabled, and then disable inference by changing the "Swift 3 @objc Inference" build setting to "Default" for the "アプリ名" target.
Swift 4モードでのSwift 3 @objc推論の使用は廃止されました。
推奨されない@objcの推論のWarningに対処し、「廃止されたSwift 3 @objc推論の使用」ロギングを有効にしてコードをテストし、 「アプリ名」 targetの 「Swift 3 @objc Inference」ビルド設定を 「Default」にしてください。
——Swift 3で作ったコードを開いたら出た。よくわからんのだけど、Objective-CのクラスとかをSwiftで扱う時に型を推定してくれてたのかな? んで、それが廃止になって、型変換とかを自分で明示的にやれ…とかそんな意味か?
別にObjective-Cのコードとか使ってなかったけど、Xcode 8でデフォルトでそういう設定だったんだろう。それなら自動で直してくれりゃいいのに。グチグチ。
ここをDefaultに変えるとWarningが消える |
#selectorの書き方?
Timer.scheduledTimer(timeInterval: 0.5,
target: self,
selector: #selector(IdleEvents.filterUpdate(timer:)),
userInfo: nil,
repeats: true)
2番目のエラーにはFixってボタンが出るんでそれを押すと消えるんだけど、一時的なものらしく、また出たり、@objcってのをコード中の変なところに挿入されたり、なんだかよくわからん!
Argument of '#selector' refers to instance method 'filterUpdate(timer:)' that is not exposed to Objective-C
Add '@objc' to expose this instance method to Objective-C
どうやら、#selectorで呼び出す関数、メソッドの頭に「@objc」ということらしい。
@objc func hogehoge() { … }
んで、そんなこんなやってたら自作のクラスにExpected declarationというエラーが出るようになった。
調べたらコードの最後に「@objc」が付けられてた。さっきのFixボタンがいい加減なところに挿入しやがったんだな。
'NSFontAttributeName' has been renamed to 'NSAttributedStringKey.font'
Replace 'NSFontAttributeName' with 'NSAttributedStringKey.font'
'NSForegroundColorAttributeName' has been renamed to 'NSAttributedStringKey.foregroundColor'
Replace 'NSForegroundColorAttributeName' with 'NSAttributedStringKey.foregroundColor'
'NSShadowAttributeName' has been renamed to 'NSAttributedStringKey.shadow'
Replace 'NSShadowAttributeName' with 'NSAttributedStringKey.shadow'
0 件のコメント:
コメントを投稿