私はUIViewController
をリファクタリングして、そこにはないはずのUI以外のものを削除します。私はAndy Matuschak's great talk about thisを見ており、一例では、彼はNSPredicate
を拡張しており、述語がビューコントローラからのものでなければならない動くロジックを動かし、fetchRequest.predicate
に結果を設定します。私の便利なinitは内線では機能しません
私は同じことをやろうとしているが、私は私の拡張機能の利便性のinitのエラーを取得しています:
import Foundation
extension NSPredicate {
convenience init(forLiftLogFilter) { // it doesn't like this line
if let logFilter = UserDefaultsManager.sharedInstance.logFilter?.rawValue {
filterPredicate = NSPredicate(format: "lift.liftName = [c] %@", logFilter)
} else {
filterPredicate = nil
}
}
}
そして、私はそうのような `のUIViewController」から呼び出します:
override func viewWillAppear(animated: Bool) {
let filterPredicate = NSPredicate.forLiftLogFilter // thinks NSPredicate doesn't have a member named 'forLiftLogFilter'
reloadData(filterPredicate)
super.viewWillAppear(animated)
}
私の場合、初期化パラメータを渡す必要はありませんが、私は電話をかけるためにforLiftLogFilter
という外部名が必要であると確信しています。 Xcode(8.0/Swift 2.3)では、「名前のないパラメータは空の名前「_」で記述する必要があります。私はそのエラーを理解していますが、実際にはパラメータはありません。 forLiftLogFilter
がパラメータか何かであると考える必要があります。もちろん、これは動作していないので、私が電話をしている私のUIViewController
では、 'タイプNSPredicateにはメンバーがありません' forLiftLogFilter 'と伝えられます。
拡張機能、イニシャライザなどについて多くの読書をしましたが、名前は付いていてもパラメータはありません。
私のイニシャライザに何が間違っているのか理解してもらえますか?
extension NSPredicate {
convenience init(forTasksWithinNumberOfDays numberOfDays: Int, ofDate: Date, calendar: NSCalendar = NSCalendar.currentCalendar()) {
self.init(format: "dueDate = %@" argumentArray: [calendar.dateByAddingUnit(.day, value: numberOfDays, toDate: date, options: NSCalendarOptions())!]
}
}
と、彼はこのようなビューコントローラからのようにそれを呼び出す:比較のために、ここでアンディは彼のデモに使用するコードは
をだ
override func viewDidLoad() {
super.viewDidLoad()
fetchRequest.predicate = NSPredicate(forTasksWithinNumberOfDays: 10, ofDate: NSDate())
私はショーにこれを追加しましたどのような構造の私は私に従う必要があると思う...
@rmaddyこんにちは、私は再びそれは私がやろうとしているものだと思うが、していない、私は一種のよ初心者なので、私が何を話しているのか必ずしも分かりません。私は近似しようとしているコードの例を追加しました。多分それはそれをクリアするでしょう。 'self.init()'はおそらく違いがありますか? – Jim
また、Andy氏は、その拡張子を示すとコメントします。「私は同じように簡単に工場種別を作ることができます。それはあなたが提案したものに似ていますか? – Jim
他の 'init'メソッドと区別するために' init'メソッドに渡すパラメータがないので、同じ方法を使用することはできません。 – rmaddy