SwiftUI보기에서 프로토콜을 사용할 수 없습니다.

toqix

저는 현재 할 일 또는 숙제와 같은 다양한 유형의 과제를 사용하고 있기 때문에 과제를 관리하기 위해 앱을 개발하고 있습니다. 그래서 저는 모든 과제가 가져야하는 모든 키 변수에 대한 프로토콜을 만들었습니다. 그래서 나중에 하나의 "모두"목록에 모든 다른 유형 (할당에 부합하는)을 표시 할 수 있습니다.

플레이 그라운드에서 테스트 할 때 할당을 준수하는 모든 유형을 취하고 제목과 설명을 표시하는보기를 구축했습니다. 그러나 주요 프로젝트를 시작할 때 이러한 문제가 발생했습니다. 프로젝트 구조

클래스 과제는 내 모든 데이터를 보유합니다. 현재 저는 과제, 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

누군가 내가 뭘 잘못하고 있는지 또는 이것을 고치는 방법을 알고 있습니까? 나는 프로토콜이 처음이고 솔직히 말해서 지금까지 그것을 즐기지 못했습니다.

toqix

도움을 주셔서 감사합니다. 프로토콜 할당을 클래스 할당으로 대체하여 모든 작업을 수행했습니다.

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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

JMeter에서 여러 프로토콜을 기록 할 수 없습니다.

Swift의 다른 프로토콜에서 프로토콜을 연관 유형으로 사용할 수 없습니다.

Swift에서 MKAnnotation 프로토콜을 준수 할 수 없습니다.

언어 서버 프로토콜을 초기화 할 수 없습니다.

Python 서버 socket.error : [Errno 92] 프로토콜을 사용할 수 없습니다.

프로토콜에 연결된 유형이 있으면 프로토콜 유형의 속성을 사용할 수 없습니다.

ForEach에서 프로토콜 배열을 사용할 수 있습니까?

HTTPS 프로토콜에서 "HTTP 인증"을 사용할 수 있습니까?

MacOS에서 socketCAN 프로토콜을 사용할 수 있습니까?

'()'유형은 '보기'를 따를 수 없습니다. struct / enum / class 유형 만 프로토콜을 준수 할 수 있습니다. SwiftUI로 함수 호출

프로토콜을 준수하는 Swift 제네릭 유형을 프로토콜 참조에 사용할 수 없습니까?

다른 프로토콜에서 상속 된 프로토콜을 확장 할 수 있습니까?

http.Get에서 프로토콜을 사용할 수 없음 오류를 반환합니다.

Mongodb 프로토콜을 사용하여 Azure DocumentDb에서 인덱스를 만들 수 없습니다.

Mongodb 프로토콜을 사용하여 Azure DocumentDb에서 인덱스를 만들 수 없습니다.

Swift 4-공개 수정자는 프로토콜에서 사용할 수 없습니다.

루프백-루프백에서 mongodb + srv 프로토콜을 사용하여 Mongo DB Atlas에 연결할 수 없습니다.

Swift에서 프로토콜의 속성을 구현하기 위해 구체적인 하위 클래스를 사용할 수 없습니다.

SO_ACCEPTCONN에서 사용할 수 없는 프로토콜

지원되지 않는 프로토콜로 인해 OpenSSL에서 SSL 연결을 설정할 수 없습니다.

프로토콜 / 대리자를 사용하여 하위 VC에서 상위 VC로 값을 전달할 수 없습니다.

Swift 3는 프로토콜을 따르는 객체 배열을 해당 프로토콜 컬렉션에 추가 할 수 없습니다.

오류 : 프로토콜을 사용할 수 없습니다. 역 추적을 덤프합니다.

SwiftUI에서 사용자 정의보기를 사용할 수 없습니다.

SwiftUI 대체보기-구체적인 유형 만 프로토콜을 준수 할 수 있으므로 프로토콜 유형 'Any'는 'View'를 준수 할 수 없습니다.

Android에서 Bluetooth 용 RFCOMM 프로토콜을 퍼징 할 수 있습니까?

Azure vpn 오류이 확장 가능한 인증 프로토콜과 함께 사용할 수있는 인증서를 찾을 수 없습니다. (오류 798)

Swift에서 프로토콜 확장에서 일반 열거 형을 어떻게 사용할 수 있습니까?

SwiftUI에서보기의 배경색을 변경할 수 없습니다.

TOP 리스트

  1. 1

    Matlab의 반복 Sortino 비율

  2. 2

    ImageJ-히스토그램 빈을 변경할 때 최대, 최소 값이 변경되는 이유는 무엇입니까?

  3. 3

    Excel : 합계가 N보다 크거나 같은 상위 값 찾기

  4. 4

    C #에서 'System.DBNull'형식의 개체를 'System.String'형식으로 캐스팅 할 수 없습니다.

  5. 5

    원-사각형 충돌의 충돌 측면을 찾는 문제

  6. 6

    Oracle VirtualBox-설치를 위해 게스트를 부팅 할 때 호스트 시스템이 충돌 함

  7. 7

    어떻게 아무리 "나쁜", ANY의 SSL 인증서와 HttpClient를 사용하지합니다

  8. 8

    Ubuntu는 GUI에서 암호로 사용자를 만듭니다.

  9. 9

    잘못된 상태 예외를 발생시키는 Apache PoolingHttpClientConnectionManager

  10. 10

    Python 사전을 사용하는 동안 "ValueError : could not convert string to float :"발생

  11. 11

    openCV python을 사용하여 텍스트 문서에서 워터 마크를 제거하는 방법은 무엇입니까?

  12. 12

    Vuetify 다중 선택 구성 요소에서 클릭 한 항목의 값 가져 오기

  13. 13

    C ++ VSCode에서 같은 줄에 중괄호 서식 지정

  14. 14

    Cassandra에서 버전이 지정된 계층의 효율적인 모델링

  15. 15

    JQuery datepicker 기능이 인식되지 않거나 새 프로젝트에서 작동하지 않음

  16. 16

    cuda 11.1에서 Pytorch를 사용할 때 PyTorch가 작동하지 않음: Dataloader

  17. 17

    jfreecharts에서 x 및 y 축 선을 조정하는 방법

  18. 18

    상황에 맞는 메뉴 색상

  19. 19

    마우스 휠 JQuery 이벤트 핸들러에 대한 방향 가져 오기

  20. 20

    매개 변수에서 쿼리 객체를 선언하는 방법은 무엇입니까?

  21. 21

    Maven은 아이 프로젝트 대상 폴더를 청소하지

뜨겁다태그

보관