2016-11-21 2 views
1

모든 유형을 반환 할 수있는 함수를 만들려고합니다. 내가 할 는 유형 Any의 객체를 반환하지하지만, 다른 유형, 즉 String, Bool, Int 등의 당신은 아이디어를 얻을.Swift의 함수에서 모든 유형을 반환하십시오.

func example<T>(_ arg: T) -> T { 
    // Stuff here 
} 

을하지만 같은 유형의 인수를 전달하지 않고 그것을 할 수 있습니다 :

는 쉽게 이런 식으로 사용하여이 제네릭을 할 수 있습니까? 여기에 내가 생각하고 무엇을 :

func example<T>() -> T { 
    // Stuff here 
} 

내가이 일을하려고, 모든 작동 I 함수를 호출 할 때까지, 나는이 오류 얻을 :

generic parameter 'T' could not be inferred 

답변

4

is it possible to do it without passing in any arguments of the same type?

이 대답은 '예'를 , 컴파일러가 제네릭 함수의 올바른 버전을 유추 할 수있는 방법이 필요합니다. 결과를 지정하는 것이 무엇인지 알면 작동합니다. 예를 들어 let 또는 var 선언을 명시 적으로 입력 할 수 있습니다. 아래는 스위프트 3의 놀이터에서 작동합니다.

protocol Fooable 
{ 
    init() 
} 

extension Int: Fooable {} 
extension String: Fooable {} 

func foo<T: Fooable>() -> T 
{ 
    return T() 
} 

let x: String = foo() // x is assigned the empty string 
let y: Int = foo() // y is assigned 0 
관련 문제