Avatar
Core Data の記事のコードですが、たしかにこれだと will never be executed の警告が出そうですね。 func fetchEmployees() -> [EmployeeMO] { let context = persistentContainer.viewContext let employeesFetch = NSFetchRequest<NSFetchRequestResult>(entityName: "Employee") do { let fetchedEmployees = try context.fetch(employeesFetch) as! [EmployeeMO] return fetchedEmployees } catch { fatalError("Failed to fetch employees: \(error)") } return [] }
2:02 PM
理由は、この関数は return fetchedEmployeesfatalError("Failed to fetch employees: \(error)") で必ず終了するからです。
2:03 PM
try context.fetch(employeesFetch)try がマークされているので、ここでエラーが発生したときに catch 節に入るということがわかります。なので、エラーが発生しなければ return fetchedEmployees 、発生したら fatalError("Failed to fetch employees: \(error)")fetchEmployees() は終了します。
2:04 PM
そのため、 return [] が実行されることはなく、コンパイラが will never be executed (決して実行されることがない)と警告しているのです。
2:05 PM
ちょっとこれは、この記事のコードが信頼できるレベルかあやしいですね・・・。貼った記事が良くなかったかもしれません。
2:05 PM
本当は Apple の公式ドキュメント https://developer.apple.com/documentation/coredata を見るのがいいのですが、
2:07 PM
結構断片的で、ざっとみた限りでは基本的なクエリと fetch について書かれている箇所を発見できませんでした。
2:12 PM
ただ、 tarunon さんの言うように、
  • オブジェクト指向の基礎
を身に付けることも必要ですし、↑のコードを理解するには
  • Swift の基本構文や標準ライブラリの基礎(たとえば、↑のコードの tryas! の意味は? fatalError で何が起こる? fatalError の戻り値の型の Never とは?どういうケースで will never be executed の警告が出るか)
  • Core Data の基礎
  • NSPredicate (これ自体は Core Data とは独立に Foundation に存在します)
についての知識も必要になります。
2:16 PM
さらに、 @Deleted User さんの最初のコードでは SwiftUI と UIKit のコードが混ざっており、 UIKit 側に SwiftUI の @Environment などが用いられているのですが、おそらく何かのコードをみようみまねで書いたのだと思いますが、それらについてどう書くべきかを理解するには SwiftUI について学ぶ必要がありますし、そのためには Property Wrapper や Combine の理解も必要になります。
2:17 PM
それらを一歩一歩分解して理解していくことは、遠回りに見えるかもしれませんが、近道じゃないかと僕は思います。
2:19 PM
僕個人の意見としては、とりあえず最初は SwiftUI を使わずに UIKit で書いた方が理解しやすいと思います。 SwiftUI は Swift の高度な機能が色々使われていて、真に理解するのはとてもむずかしいので。僕もよくわからないことがたくさんあります。