You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中如何检查函数参数Int值是否在指定数组中?(附报错代码)

解决Swift中判断数值是否存在于Any数组的错误

错误原因分析

你写的代码里,arr.contains(where: num)这一行出错了,因为contains(where:)方法要求传入的参数是一个闭包,类型为(Any) throws -> Bool,用来对数组中的每个元素进行判断;但你直接传入了Int类型的num,类型不匹配,所以编译器报错。

另外还要注意:你的数组类型是Array<Any>,而Any并没有遵守Equatable协议,所以没法直接用contains(_:)方法(这个方法要求元素类型遵守Equatable)。

修正后的代码

我们需要在contains(where:)里传入一个闭包,先判断数组中的元素是否是Int类型,再和目标数值比较:

func check(num: Int, arr: Array<Any>) -> Bool {
    return arr.contains { element in
        guard let intElement = element as? Int else {
            return false
        }
        return intElement == num
    }
}

// 调用测试
check(num: 7, arr: [1, 4, 7, 25, 99]) // 返回true
check(num: 5, arr: [1, "a", 7]) // 返回false

也可以简化闭包的写法:

func check(num: Int, arr: Array<Any>) -> Bool {
    return arr.contains { $0 as? Int == num }
}

优化方案:使用泛型让函数更通用

如果你的数组元素类型固定(比如都是Int),可以用泛型来让函数支持任意遵守Equatable的类型,同时避免Any带来的类型判断开销:

func check<T: Equatable>(num: T, arr: [T]) -> Bool {
    return arr.contains(num)
}

// 调用测试
check(num: 7, arr: [1, 4, 7, 25, 99]) // 返回true
check(num: "apple", arr: ["banana", "apple", "orange"]) // 也支持字符串类型

这样函数的复用性更强,类型更安全,代码也更简洁。

内容的提问来源于stack exchange,提问作者Guga Peranidze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 00:40:28