에 나는 다음과 같은 코드가 있습니다반환 무기 호 일반 유형
class Function<T> {
var ptr:() throws -> T
init<Func>(block: Func, args: AnyObject...) {
self.ptr = {() throws -> T in
let result: AnyObject? = nil
if T.self == Void.self {
return Void() as! T
}
return result //Error Here.. Cannot as! cast it either.. Cannot unsafeBitCast it either..
}
}
}
postfix operator^{ }
postfix func^<T>(left: Function<T>) throws -> T {
return try left.ptr()
}
func call() {
let block: (String) -> String? = {(arg) -> String? in
return nil
}
let fun = Function<String?>(block: block, args: "Hello")
fun^
}
기능 Block.execute
반환 AnyObject?
합니다. 내 일반 클래스 Function<T>
의 반환 유형은 T
입니다.
T
이 이미 String?
인 경우 왜 nil을 반환 할 수 없습니까?
이미 선택 사항 인 T 유형으로 nil을 반환하는 방법이 있습니까? 내가 T
옵션, 다음 반환 형식 내가 .. 원하는하지 않은 Optional<Optional<String>>
을하게 한 경우
는 컴파일러 OptionalOptional
가 나는 T
이미 선택 것을 알고 어떻게 그 ??
로 풀어되지 않는다는 불평.
이'execute' 메소드는 어디에서 오는가? – LopSae
내부 라이브러리에서. 항상 'AnyObject?'를 반환합니다. – Brandon
놀이터에 복사 붙여 넣기처럼 쉽게 재현 할 수있는 예제를 만들어보십시오. – LopSae