如何让函数接受所有类型的数组

时间:2015-10-26 01:29:15

标签: ios arrays swift function

我是Swift的新手,我想知道如何让一个函数接受一个包含各种变量类型的数组。我希望该功能只接受“阵列”。没有特定类型但它会抛出错误。这是我的代码:

func length(arry arry: Array)
{

}

我知道我必须放一个<>在Array之后我需要通用接受所有数组的函数。

编辑: 每当我添加扩展程序时,我都会遇到这些荒谬的错误。我的代码是:

//: Playground - noun: a place where people can play

import UIKit
extension Array {
var length: Int {
    return self.count
}
}
var arrY = ["Hello", 0]

for(var i = 0; i < length(arry: arrY); i++)
{
print(arrY[i]);
}

arrY.append(28);
var h = arrY.removeAtIndex(0);
print(h);

我收到错误说:   1在线10扩展可能不包含存储的属性   2在线11预期声明   3在线十八期预期声明 谢谢,

杰克

3 个答案:

答案 0 :(得分:5)

如果需要,可以编写通用函数:

func length<T>(arry arry: Array<T>)
{

}

在Swift中,Apple引入了Generics的概念,你现在也可以在Xcode 7和Objective-C上找到它。此功能允许您定义Array或您正在使用的集合类中每个元素的类型。您可以定义泛型类或通用方法,如给定的示例。此功能使您能够以一种可以安全地使用不同类型的方式编写代码,同时利用类型安全的优势。例如,在我给出的示例中,它说length是一个通用方法,它将类型为T的数组作为输入。编写这样的方法,允许您编写一个能够接受不同类型的数组的方法。例如,下面的示例代码显示您可以对Int数组和Double数组使用相同的方法:

var arr = [13, 23, 32]
var arr2 = [12.3, 23.5, 13.14, 2.75]
var arr3 = ["foo", "boo"]
length(arr)
length(arr)
length(arr)

有关Generics的更多信息,您可以在this Link查看在线文档,和/或观看WWDC 2014的Swift介绍视频,和/或阅读The Swift Programming Language的通用部分

答案 1 :(得分:1)

使用通用功能是更好的答案。但您也可以使用[Any]作为此函数的参数。

func length(array: [Any])->Int{
    return array.count
}

答案 2 :(得分:1)

如果您已经习惯.length,那么使用length属性对数组进行扩展:

extension Array {
    var length: Int {
        return self.count
    }
}

然后你可以像以前一样在数组上调用它:

["a", "b"].length  // 2
[0, 1].length  // 2