Swift数组中元素存在性检查:2025最佳实践

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

🔍 为什么要在Swift数组中检查元素存在性?2025年如何正确操作?

\n\n

想象一下:您正在编写一个披萨订购应用。用户选择了"意大利辣香肠披萨"、"夏威夷披萨"和"玛格丽特披萨"。您的代码需要确认"意大利辣香肠披萨"是否已在购物车中,以避免添加重复项。或者,您正在处理客户数据库,检查邮箱是否已在系统中注册。检查数组中元素的存在性是Swift开发中最常见的操作之一。

\n\n

看起来很简单,对吧?但在2025年,随着Swift的快速发展以及移动应用性能的关键性,选择错误的方法可能会导致UI卡顿或浪费数小时的调试时间。在本文中,我们将详细讲解在Swift数组中检查元素的所有方法:从简单的contains()到高级闭包以及自定义类型的处理。您将了解如何根据您的任务选择合适的方法及其原因。

\n\n

顺便提一下,这个问题是Stack Overflow上最热门的问题之一(超过20万次浏览)。我们将给出一个全面且现代的答案。开始吧!🚀

\n\n

📦 Swift数组基础概述(适合赶时间的读者)

\n\n

数组(Array)是一种有序的、包含相同类型元素的集合。在Swift中,数组是类型安全的,这意味着您无法意外地将字符串添加到数字数组中。这既是优点(减少错误),也是挑战(需要严格指定类型)。

\n\n
let pizzaMenu: [String] = ["玛格丽特", "意大利辣香肠", "夏威夷", "四奶酪"]\nlet numbers: [Int] = [1, 2, 3, 4, 5]\n
\n\n

现在进入正题——如何检查数组中是否存在某个元素?

\n\n

🛠️ 检查Swift数组中元素存在性的5种最佳方法

\n\n

1. contains() —— 简单之王(Equatable)

\n\n

最直观且最常用的方法。contains(_:)方法在找到元素时返回true。仅适用于符合Equatable协议的类型(所有基本类型如String、Int、Double等都符合)。

\n\n
let pizzas = ["玛格丽特", "意大利辣香肠", "夏威夷"]\nif pizzas.contains("意大利辣香肠") {\n    print("有这种披萨!") // ✅ 将输出此结果\n} else {\n    print("未找到披萨")\n}\n
\n\n

优点:可读性强、简洁、快速。

\n

缺点:如果您的对象(结构体/类)没有实现Equatable,则无法使用。

\n\n

2. contains(where:) —— 用于复杂检查

\n\n

如果您需要检查的不是精确匹配,而是一个条件(例如,"是否有价格超过500卢布的披萨?"),请使用contains(where:)。它接受一个返回Bool的闭包。

\n\n
struct Pizza {\n    let name: String\n    let price: Int\n}\n\nlet order: [Pizza] = [\n    Pizza(name: "玛格丽特", price: 450),\n    Pizza(name: "意大利辣香肠", price: 550),\n    Pizza(name: "夏威夷", price: 500)\n]\n\nlet hasExpensivePizza = order.contains { $0.price > 500 }\nprint("有昂贵的披萨吗? \\(hasExpensivePizza)") // true\n
\n\n

优点:灵活,适用于任何类型。

\n

缺点:比contains()稍慢(但在99%的情况下差异可以忽略不计)。

\n\n

3. firstIndex(of:) —— 当索引很重要时

\n\n

有时不仅需要知道元素是否存在,还需要获取其位置。例如,为了删除或替换它。firstIndex(of:)方法返回一个可选的Int?。

\n\n
let pizzas = ["玛格丽特", "意大利辣香肠", "夏威夷"]\nif let index = pizzas.firstIndex(of: "意大利辣香肠") {\n    print("意大利辣香肠在位置 \\(index)") // 1\n} else {\n    print("未找到")\n}\n
\n\n

重要提示:firstIndex也需要Equatable。如果您的类型不符合

博客

书籍推荐