2015-10-17 43 views
1

参数的参数这是基本的功能是什么,我试图做的:如何采取任何数量的任何类型的迅速

,可以接受任何数量的参数和任何回报的任何功能的功能类型

这甚至可能吗?

func fun1(x: Int,y: String){ 

} 

func fun2(c: Float){ 

} 

func thefunction(function,parameters) { 
    function(parameters[0],parameters[1]...) 
} 

thefunction(fun1,3,"hi") 
thefunction(fun2,4.5) 
+0

目前还不清楚你想要做什么。你想让'thefunction'根据传递给'thefunction'的内容调用fun1或fun2吗? –

回答

1

斯威夫特有以下类型允许任何类型的参数:

AnyObject 

此外,您可以在您的参数列表的末尾,其允许的参数动态量创建一个参数通过。我直接从苹果公司的文档拉这个以供参考:

func arithmeticMean(numbers: Double...) -> Double { 
    var total: Double = 0 
    for number in numbers { 
     total += number 
    } 
    return total/Double(numbers.count) 
} 

你可以看到该条目here。这是一个惊人的研究将做一些..

这就是说,我并不真的建议这样做。它使你的代码很难理解其他人。如果你需要使这个函数如此普遍以至于它可以从字面上接受任何对象并返回任何数量的对象,那么可能有更好的方法来实现它。

+0

IIRC,有些类型不能用'AnyObject'(结构体,类对象)来表示,但是有一种Any类型可以容纳任何东西。 – NobodyNada

+0

好的加法@NobodyNada在OP真正想要使用任何可能需要甚至比AnyObject更**一般的任何事情的情况下。 –

0

Swift没有apply函数。但是你可以使用通用的功能:

func fun1(x: Int, y: String){ 
    print(x, y) 
} 

func fun2(c: Float){ 
    print(c) 
} 

func apply<Arg1, Return>(function: (Arg1) -> Return,_ arg: Arg1) -> Return { 
    return function(arg) 
} 

func apply<Arg1, Arg2, Return>(function: (Arg1, Arg2) -> Return, _ arg1: Arg1, _ arg2: Arg2) -> Return { 
    return function(arg1, arg2) 
} 

apply(fun1, 1, "foo") 
apply(fun2, 3.1) 

的缺点是,你需要一个通用的apply每个元数。 好处在于,如果调用带有错误参数的函数,会导致编译器错误。