0
의 프로토콜에 맞는 스위프트 일반 형식을 만들려고합니다.스위프 확장자의 프로토콜에 제네릭 유형 일치
enum Maybe<T>{
case Nothing
case Something(T)
init(){
self = .Nothing
}
init(_ something: T){
self = .Something(something)
}
}
나는 그것을 준수하고자하는 프로토콜이 NilLiteralConvertible
입니다 내가 확장에하려고하면, 내가 미쳤다고 오류의 무리 얻을 :
extension Maybe<T>: NilLiteralConvertible{
}
난 단지 수를이 유형입니다 Maybe<T>
의 주 정의에서 선언하면 구현하십시오. 이런 젠장???
enum Maybe<T>: NilLiteralConvertible{
case Nothing
case Something(T)
init(){
self = .Nothing
}
init(_ something: T){
self = .Something(something)
}
// NilLiteralConvertible
static func convertFromNilLiteral() -> Maybe<T> {
return Maybe<T>()
}
}
구현이 어떻게 작동할까요? 나는 다음과 같은 예를 시도 (IntegerLiteralConvertible와)과는 동작하지 않습니다 : '확장 미정 : 정적 IntegerLiteralConvertible을 {convertFromIntegerLiteral FUNC (값 : IntegerLiteralType을) -> 아마 { 반환 어쩌면 (값) } 을 }' 컴파일러는 T가 Int와 동일하지 않다고 불평합니다. : -? –
cfischer
'NilLiteralConvertible'에 대해서는 업데이트 된 답변을 참조하십시오. 'IntegerLiteralConvertible'에 관해서는, 나는 당신이 정수로 무엇을하고 싶습니까? enum이 generic을 사용하기 때문에 관련 값으로 사용할 수 없습니다. 정수 호환이 가능하다는 가정을 할 수 없기 때문에 – Antonio
제네릭 형식의 구체적인 인스턴스화 방법이 있다면 (아마도) 프로토콜,이 경우 IntegerLiteralConvertible. 이것이 가능한가? –
cfischer