저는 현재 할 일 또는 숙제와 같은 다양한 유형의 과제를 사용하고 있기 때문에 과제를 관리하기 위해 앱을 개발하고 있습니다. 그래서 저는 모든 과제가 가져야하는 모든 키 변수에 대한 프로토콜을 만들었습니다. 그래서 나중에 하나의 "모두"목록에 모든 다른 유형 (할당에 부합하는)을 표시 할 수 있습니다.
플레이 그라운드에서 테스트 할 때 할당을 준수하는 모든 유형을 취하고 제목과 설명을 표시하는보기를 구축했습니다. 그러나 주요 프로젝트를 시작할 때 이러한 문제가 발생했습니다. 프로젝트 구조
클래스 과제는 내 모든 데이터를 보유합니다. 현재 저는 과제, HomeWork 및 OnlineLesson을 따르는 두 가지 유형의 두 가지 목록이 있습니다. 이것은 전환 일 뿐이며 여전히 좋은 습관이 아닙니다 ...
나중에 func getAll은 두 목록을 모두 반환해야합니다.
class Assignments: Storable, Codable, ObservableObject {
@Published var homeWorks: [HomeWork]
@Published var sortDescriptor: SortType
@Published var onlineLessons: [OnlineLesson]
func getAll<A: Assignment>() -> [A] {
var toReturn: [A] = []
toReturn.append(contentsOf: homeWorks as! [A])
toReturn.append(contentsOf: onlineLessons as! [A])
//I also don't understand why I have to cast the arrays as both types already conform to Assignment
return toReturn
}
}
이것이 'Assignment'프로토콜입니다 .
protocol Assignment: ObservableObject, Identifiable {
var title: String {get set}
var description: String {get set}
var createdAt: Date {get}
var dueTo: Date {get}
var type: AssignmentType {get set}
}
보기
struct AssignmentsAllView: View {
@EnvironmentObject var assignments: Assignments
...
}
@main
struct Homework_PlannerApp: App {
var assignments: Assignments = Assignments()
var body: some Scene {
WindowGroup {
ContentView()
.environmentObject(assignments)
}
}
}
1 위 : 목록 내부
ForEach(assigments.getAll()) {assigment in
//Unable to infer type of a closure parameter 'assigment' in the current context
// Generic parameter 'A' could not be inferred
}
2 차 : 목록없이 시도 할 때
Text(homeWorks.getAll().first!.title) //Generic parameter 'A' could not be inffered
누군가 내가 뭘 잘못하고 있는지 또는 이것을 고치는 방법을 알고 있습니까? 나는 프로토콜이 처음이고 솔직히 말해서 지금까지 그것을 즐기지 못했습니다.
도움을 주셔서 감사합니다. 프로토콜 할당을 클래스 할당으로 대체하여 모든 작업을 수행했습니다.
class Assignment: ObservableObject {
@Published var title: String
@Published var description: String
@Published var createdAt: Date
@Published var dueTo: Date
let type: AssigmentType
init(title: String, description: String, dueTo: Date, type: AssigmentType) {
self.title = title
self.description = description
self.createdAt = Date()
self.dueTo = dueTo
self.type = type
}
}
HomeWork 및 OnlineLesson 클래스는 이제이 수퍼 클래스에서 상속됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다