2014-06-22 3 views
1

함수에서 Swift에서 Int 나 String 또는 다른 유형이 될 수있는 함수 또는 값을 반환하고 싶습니다. 이 모든 것을 나타낼 수있는 유형은 무엇입니까?Swift의 함수에서 모든 유형의 객체 반환하기

다음 코드 인해 autoCurry 기능 return self.autoCurry(function, params, numArgs: argsRemaining)

class $ { 


    class func curry<P, T>(function: (P...) -> T, _ parameters: (P[])) -> ((P...) -> Any?) { 
     return { 
      (curryParams: P...) -> Any? in 
      var params:P[] = [] 
      return function(reinterpretCast(parameters + curryParams)) 
     } 
    } 

    class func autoCurry<P, T>(function: (P...) -> T, _ parameters: (P[]), numArgs: Int) -> ((P...) -> Any?) { 
     let funcParams: P[] = [] 
     let funcRef = { (curryParams: P...) -> Any? in 
      if curryParams.count < numArgs { 
       let argsRemaining = numArgs - curryParams.count 
       let params = parameters + curryParams 
       return self.autoCurry(function, params, numArgs: argsRemaining) 
      } else { 
       return function(reinterpretCast(curryParams)) 
      } 
     } 
     return funcRef 
    } 
} 

답변

3

기능을 덮는 스위프트 타입 없다이 라인에 에러가 발생. 두 개의 '제네릭'유형은 명시 적으로 함수를 제외합니다.

“Swift provides two special type aliases for working with non-specific types: 

    AnyObject can represent an instance of any class type. 
    Any can represent an instance of any type at all, apart from function types.” 


Excerpt From: Apple Inc. “The Swift Programming Language.” 
    iBooks. https://itun.es/us/jEUH0.l 

따라서 함수와 다른 유형을 모두 포함 할 수있는 반환 유형을 지정할 수 없습니다.

사이드 노트 : 실제로 '카레'작업이 아니라 '부분 기능 응용 프로그램'을 수행하고있는 것처럼 보입니다. Currying은 Swift에 내장되어 있습니다.

+0

이 질문에 대한 답변을 얻으려면 '확인 표시'를 고려하십시오. – GoZoner