프로토콜 유형은 인스턴스화 할 수 없습니다.

Koen

다음 코드를 고려하십시오.

protocol Color {
    var color: UIColor { get }
}

struct Ball : Color {
    var color: UIColor
}

let ball = Ball(color: .white)
print(ball)

이것은 효과가 있으며 결과는 다음과 같습니다.

Ball(color: UIExtendedGrayColorSpace 1 1)

이제 프로토콜에서 색상 배열이 주어지고 해당 색상으로 항목 배열 (공 또는을 준수하는 다른 유형)을 반환하는 함수를 만들고 싶습니다 Color.

extension Color {
    func multipleColors(colors: [UIColor]) -> [Color] {
       var coloredItems = [Color]()
       for item in colors {
        // What do I put here ???
       }

       return coloredItems
    }
}

그리고:

let coloredBalls = ball.multipleColors(colors: [.red, .green, .blue])

괄호 안에 무엇을 넣어야할지 모르겠습니다. 예를 들어 (말장난 없음), 내가 시도하면 :

coloredItems.append(Color(color: item))

오류는 다음과 같습니다.

'Color' cannot be constructed because it has no accessible initializers

그런 다음 프로토콜에 init 메서드를 추가했고 오류가 다음과 같이 변경되었습니다.

protocol type 'Color' cannot be instantiated

이 문제를 어떻게 해결합니까?

얕은

Color(color: item)불가능한 프로토콜의 인스턴스를 만들려고 합니다.

아래에서 가능한 한 가지 일반적인 솔루션을 찾으십시오. 지금까지 비 정적 (좋은) 솔루션을 찾을 수 없습니다.

protocol Color {
    var color: UIColor {get set}
    init(color: UIColor)
}

struct Ball : Color {
    var color: UIColor
}

extension Color {
    static func item<T:Color>(_ item: T, inColors colors: [UIColor]) -> [T] {
        var coloredItems = [T]()
        for color in colors {
            let newColoredItem = T.init(color: color)
            coloredItems.append(newColoredItem)
        }

        return coloredItems
    }
}

let ball = Ball(color: .white)
let coloredBalls = type(of:ball).item(ball, inColors: [.red, .green, .blue])

print(coloredBalls)

인쇄물:

[Ball(color: UIExtendedSRGBColorSpace 1 0 0 1), Ball(color: UIExtendedSRGBColorSpace 0 1 0 1), Ball(color: UIExtendedSRGBColorSpace 0 0 1 1)]

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

프로토콜 유형에 클래스 인스턴스를 할당 할 수 없습니까?

AnyObject로 돌아가는 동안 Swift "프로토콜 유형 'AnyObject'를 인스턴스화할 수 없습니다" 오류

유형은 'T'유형에 할당 할 수 없지만 'T'는 제약 유형의 다른 하위 유형으로 인스턴스화 될 수 있습니다.

신속한 프로토콜 '약함'은 클래스가 아닌 유형에 적용 할 수 없습니다.

유형 T를 인스턴스화 할 수 없습니다.

AppiumDriver 유형을 인스턴스화 할 수 없습니다.

ColorModel 유형을 인스턴스화 할 수 없습니다.

LocationListener 유형을 인스턴스화 할 수 없습니다.

유형을 인스턴스화 할 수 없습니다 (추상)

List <Product> 유형을 인스턴스화 할 수 없습니다.

유형 세트를 인스턴스화 할 수 없습니다.

HttpClient 유형을 인스턴스화 할 수 없습니다.

"유형을 인스턴스화 할 수 없습니다 ..."

유형 노드를 인스턴스화 할 수 없습니다.

LinqMap 유형을 인스턴스화 할 수 없습니다.

구현 유형을 인스턴스화 할 수 없습니다.

WebDriver 유형을 인스턴스화 할 수 없습니다.

GetFormErrorInterface [1]이 다형성 유형이 아니므로 GetFormErrorInterface를 인스턴스화 할 수 없습니다.

Scala - 패턴 일치 - 생성자를 예상 유형으로 인스턴스화할 수 없습니다.

프로토콜 유형 'Encodable'의 값은 'Encodable'을 준수 할 수 없습니다. struct / enum / class 유형 만 프로토콜을 준수 할 수 있습니다.

유효하지 않은 ZKStringSerializer 참조로 인해 ZkClient를 인스턴스화 할 수 없습니다.

Swift 3에서 제네릭 유형 AnyObject로 NSFetchedResultController를 인스턴스화 할 수 없습니다.

scala.util.parsing.combinator.RegexParsers 생성자를 예상 유형으로 인스턴스화 할 수 없습니다.

InvalidArgumentError: tensorflow.GraphDef 유형의 프로토콜 버퍼를 직렬화할 수 없습니다.

ViewModel은 Fragment에서 인스턴스화 할 수 없습니다.

Java Weka 클래스에서 유형 인스턴스를 인스턴스화 할 수 없습니다.

Jersey 직렬화 / 역 직렬화 문제 : 추상 유형은 추가 유형 정보로만 인스턴스화 할 수 있습니다.

유형 구성 미러 API를 인스턴스화 할 수 없습니다.

PyXB : 추상 유형을 인스턴스화 할 수 없습니다.

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은 아이 프로젝트 대상 폴더를 청소하지

뜨겁다태그

보관