Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 函数的过滤数组_Arrays_Swift - Fatal编程技术网

Arrays 函数的过滤数组

Arrays 函数的过滤数组,arrays,swift,Arrays,Swift,当我过滤函数数组以从数组中排除特定函数时,过滤后的数组不包含任何元素。你知道为什么会这样吗 var array: [()->()] = [] array.append(function1) array.append(function2) let function: () function = function1() var filteredArray: [()->()] = [] filteredArray = array.filter { $0() != function }

当我过滤函数数组以从数组中排除特定函数时,过滤后的数组不包含任何元素。你知道为什么会这样吗

var array: [()->()] = []

array.append(function1)
array.append(function2)

let function: ()
function = function1()
var filteredArray: [()->()] = []
filteredArray = array.filter { $0() != function }

print(filteredArray.count) // 0

无法筛选非标称类型。这是因为它们不相等:

以下是一些非标称类型

  • Any
  • 元组
    -
  • Void aka()aka空元组
  • 函数aka()->()
您可以这样创建一个结构:

struct方法:可哈希、可等式{
变量名称:String
var方法:()->()//或任何您想要的类型
init(n:String,m:@escaping()->()){
name=n
方法=m
}
//相等的
静态函数==(lhs:Method,rhs:Method)->Bool{
返回lhs.name==rhs.name
}
//散列
func散列(放入散列程序:inout散列程序){
hasher.combine(名称)
}
}
因此,
名称
检查方法是否相等。但是
structs
就到此为止了

如果需要,可以创建类似的
,以跟踪引用


示例代码:

func function1(){print(“foo”)}
func function2(){print(“bar”)}
变量数组:[方法]=[]
append(方法(“一”,函数1))
append(方法(“两个”,函数2))
let函数:方法
函数=方法(“一”,函数1)
var filteredArray:[方法]=[]
filteredArray=array.filter{$0!=function}
打印(filteredArray.count)//1
filteredArray.first?.method()//打印“条”

Void(空元组)它不是一个函数。顺便说一句,
()->()
它不是可均衡的这不是如何创建一个包含函数的数组吗?是一个不返回任何值的函数的结果。空元组也称为Void。数组声明是正确的。function=function1()将function1的结果分配给空函数。数组中的所有函数都返回Void(不会返回与空元组相同的任何内容)
$0()
将执行函数code并返回
Void
,因此所有元素都等于
function
,即
Void
,这就是它返回空数组的原因。如果
方法
结构是可等式的
{$0.name!=function.name}
是冗余的
{$0!=function}
当我尝试将该方法附加到数组时,我得到一个错误“调用中的额外参数”,并警告“初始化'method'(又名'OpaquePointer')会导致指针悬空”@stepjesse我刚刚修复了代码中的一个bug,因此应该可以解决这个问题。请回应,如果它仍然不工作。我花了一些时间来实现它到我的游戏正确,但它的工作非常完美谢谢!