删除数组中的元素而不对索引进行硬编码?在斯威夫特

2024-01-06

这是我的第一篇文章,我很高兴加入这个社区。我正在通过 Ray Wenderlich 的视频教程学习 Swift。我在第 3 课中遇到的挑战是删除数组中的元素而不对索引进行硬编码。我理解雷提供的正确答案,但只是不明白为什么我的答案不起作用。请参阅以下雷的回答以及我的回答。如果有人能为我解释一下,那就太好了!!谢谢:]

正确答案:

// Make an array with "C", "C++", and "Objective-C"
var programmingLanguages = ["C", "C++", "Objective-C"]

// Append "Swift" to the array
programmingLanguages += "Swift"

// Insert "Javascript" at Index 2
programmingLanguages.insert("Javscript", atIndex: 2)

// Remove "Objective-C" (without hard-coding the index)
let optIndex = find(programmingLanguages, "Objective-C")
if let defIndex = optIndex {
  programmingLanguages.removeAtIndex(defIndex)
}

programmingLanguages

我的回答1:

// Make an array with "C", "C++", and "Objective-C"
var programmingLanguages = ["C", "C++", "Objective-C"]

// Append "Swift" to the array
programmingLanguages += "Swift"

// Insert "Javascript" at Index 2
programmingLanguages.insert("Javscript", atIndex: 2)

// Remove "Objective-C" (without hard-coding the index)
programmingLanguages.removeAtIndex(find(programmingLanguages,"Objective-C")

programmingLanguages

我的回答2:

// Make an array with "C", "C++", and "Objective-C"
var programmingLanguages = ["C", "C++", "Objective-C"]

// Append "Swift" to the array
programmingLanguages += "Swift"

// Insert "Javascript" at Index 2
programmingLanguages.insert("Javscript", atIndex: 2)

// Remove "Objective-C" (without hard-coding the index)
let optIndex = find(programmingLanguages, "Objective-C")
programmingLanguages.removeAtIndex(optIndex)

programmingLanguages

当你使用find()它不保证返回结果(这里会发生什么?:find(programmingLanguages, "rick astley"))

考虑到这种可能性find()返回一个“optional https://developer.apple.com/library/prerelease/mac/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-XID_427“ - 这基本上意味着当它找不到匹配项时它将返回nil.

为了保护您不误使用nil在某些不知道如何处理它的地方,该语言将可选类型视为一种独特的类型。简而言之,你must当您获得可选值时检查是否为零。

主要方法是使用“if let”语法——如 Ray 的示例所示——但更简洁(也更常见)的方法如下所示:

if let defIndex = find(programmingLanguages, "Objective-C") {
  programmingLanguages.removeAtIndex(defIndex)
}

如果您确定该选项不是nil(就像如果你正在检查你想要的东西just插入)您可以使用“强制展开”从可选值中获取值(如果是,则会导致错误并崩溃nil).

您可以使用强制展开运算符(感叹号)进行强制展开!:

// defIndex is an optional
let defIndex = find(programmingLanguages, "Objective-C")

// defIndex!  <-- unwraps the optional but raises an error if it's nil
programmingLanguages.removeAtIndex(defIndex!)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除数组中的元素而不对索引进行硬编码?在斯威夫特 的相关文章

  • iOS - 如何在 swift 中使用 `NSMutableString`

    我已经看过这段 Objective C 代码 但我很难在 swift 中做同样的事情 NSMutableAttributedString res self richTextEditor attributedText mutableCopy
  • .showsPhysics 内存泄漏

    我最近花了 5 个小时尝试调试 Spritekit 应用程序中的内存泄漏 应用程序启动后 我注意到内存使用量略有上升 我花了 5 个小时中的 3 个小时挖掘参考资料 了解强与弱的关系ARC https developer apple com
  • 为什么performSegueWithIdentifier在viewDidLoad中不起作用?

    我试图在视图控制器上调用 viewDidLoad 后立即触发故事板转场 Segue 附加了一个标识符 当从链接到按钮或其他控件的方法内部调用时 它可以正常工作 但它在 viewDidLoad 内部不起作用 它只是默默地失败了 viewDid
  • 如何从 ContentView 外部显示 SwiftUI 警报?

    我正在构建 Swift 应用程序 并试图找出如何显示警报 我有一个单独的 swift 文件正在执行一些计算 并且在某些条件下我希望它向用户显示警报 基本上告诉他们出了问题 然而 我见过的大多数例子都要求警报在ContentView或以其他方
  • `navigator.geolocation.getCurrentPosition()` 在 iOS PWA 上挂起

    我有这个片段 const getCurrentPosition gt new Promise
  • Swift SpriteKit edgeLoopF​​romRect 问题

    下面的代码可以识别底部和顶部边缘场景和球按预期弹开 但是 那左边缘和右边缘现场的情况一直被破坏 如果施加足够的力 球会离开屏幕 然后最终返回 就好像场景的边缘超出了 iPhone 模拟器窗口的边缘 import SpriteKit clas
  • locationOfTouch 和 numberOfTouches

    你好 我有这个识别器 设置为 2 次触摸 但它只返回一个 而不是两个 CGPoint void gestureLoad UIGestureRecognizer recognizer recognizer UITapGestureRecogn
  • 如何从 SDK 实现每个会话的 Google Places 自动完成功能?

    是否可以从 Android 和 iOS 应用程序的 place sdk 实现基于会话的自动完成 根据 6 月 11 日生效的新 Google 地图框架定价 对自动完成的请求可以分为基于击键 会话的请求 我找不到描述实施步骤的文档 除了这个参
  • 如何保护 iOS 应用程序免受任何操作系统攻击(在越狱设备上)

    我希望保护我的应用程序数据 以防任何操作系统攻击或越狱 iOS 设备上的未经授权的访问 在这种情况下 有什么方法可以检测此类威胁并保护应用程序数据 虽然我同意 jrturton 的说法 但如果您有想要保护的关键数据免受流氓应用程序 而不是用
  • 从按钮执行 Segue 时应用程序冻结

    我的故事板中有一个按钮 它呈现一个带有模式序列的视图控制器 每次按下此按钮时 应用程序都会冻结 没有崩溃 也没有错误消息 prepareForSegue被调用 所有应该存在的视图控制器都在代码中prepareForSegue 但它们不会出现
  • 从命令行添加 Xcode 开发者帐户

    我正在尝试使用xcodebuild allowProvisioningUpdates在我只能通过命令行访问的计算机 Azure Devops macOS 托管计算机 上 不幸的是 根据man xcodebuild为了使用 allowProv
  • UIViewControllerAnimatedTransitioning:旋转更改后黑屏片段

    我已经创建了一个视图控制器转换 只要我不更改设备方向 一切都正常 图 1 显示了应有的屏幕 然后我切换到下一个视图控制器 在其中更改方向 现在我回到第一个视图控制器并再次切换方向 然后我得到的结果如图 2 所示 出现黑色边框 请不要介意屏幕
  • Swift - 元类型 .Type 和 .self 之间有什么区别?

    元类型有什么区别 Type and self在斯威夫特 Do self and Type返回一个struct 我明白那个 self可以用来检查dynamicType 你如何使用 Type 首先也是最重要的是查看 Apple 文档type o
  • “预期的 ';'在 Swift 下的顶级声明符之后”

    我正在尝试将所有颜色设置在一个 Swift 文件中 该文件可以在我的整个应用程序中使用 下面的代码会导致 import Foundation import UIKit class DotColors let tsblueColor UICo
  • 如何向标准 UIButton 添加徽章? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 是否可以在标准中添加看起来标准的徽章UIButton 如果不支持半原生 那么实现此目的最简单的方法是什么 示例图片 这是 Sascha
  • 在 UIWebView 中播放 Facebook 视频

    有谁知道如何在 Facebook 上播放视频UIWebView 我的应用程序将视频上 传到 Facebook 并检索视频的网址 我想将此网址嵌入到UIWebView播放 我已经为 youtube 解决了这个问题 但没有为 Facebook
  • TableViewController 的 viewDidLoad 未触发

    我一直在关注这个tutorial http www appcoda com ios programming sidebar navigation menu 有一个滑出式菜单 我添加了一个 TableViewController 它将显示文章
  • 叠加 SKScene 未显示

    我正在尝试将 SKScene 覆盖在 SCNScene 上 当我在模拟器和 iPhone6 上运行我的应用程序时 overlayScene SKScene 按预期显示 但是当我尝试在 iPhone5 上运行它 尝试了 2 个不同的设备 时
  • CoreBluetooth:检测设备超出范围/连接超时

    我正在设计一个 iOS 框架来处理多个 BLE 设备 均为同一类型 目前一切都运行良好 除了一件事 客户想要一个包含可用设备的列表 但是 我如何检测过去发现的设备何时不再可用 当我尝试连接到不再可用的设备时 会出现另一个问题 文档说 连接尝
  • iPhone 上的纵向 UISplitViewController 在 iOS 8 中始终显示主视图和细节视图

    UISplitViewController in portrait在 iPhone 上始终显示主控和细节iOS 8 我尝试子类化UISplitViewController并将其配置为同时显示主视图和细节视图 但没有任何效果 class AP

随机推荐

  • 使用 ADO.NET 管理数据库连接

    我们有一个基于 ADO NET 构建的应用程序 我们遵循一些简单的最佳实践 使我们能够利用连接池 例如 使用数据库的代码块可能如下所示 using DbConnection dbConnection GetDatabaseConnectio
  • scrollOverflow 在 fullPage.js 中不起作用

    我最近开始在一个项目中使用 fullPage js 但我不知道如何让溢出滚动起作用 我的页面中的最后一个 部分 很长 因此需要垂直滚动 这是我里面的代码 tags
  • 在 JAR 中指定 JVM 堆大小

    我正在尝试编写一个游戏引擎 但它需要比默认设置更多的内存 我知道如果您双击一个 jar 则会使用默认设置 那么我是否可以指定 JAR 在其清单文件 或其他地方 中需要自定义堆大小 此外 引擎位于它自己的 jar 中 游戏位于另一个 jar
  • 在 Python 包中包含 *.pyd 文件

    我有一个 python 模块模块 pyd一旦手动将其放入 python 安装文件夹的站点包中 它就可以正常工作 当我将解决方案上传到云环境时 问题就开始了 构建包要求我将每个模块作为要安装的包传递pip install module 我创建
  • 如何覆盖Resources.Designer.cs中默认的System.Resources.ResourceManager?

    我想覆盖System Resources ResourceManager from Resources Designer cs文件来实现自定义 ResourceManager GetString 方法功能 这可能吗 我创建了一个Custom
  • 在任何其他方法调用之前自动调用方法

    我有大量的类继承大量的接口 这些类正在实现的接口不共享任何公共方法 但它们都共享一个公共的第一步 一个例子是 A类看起来像这样 class A InterfaceA GetFoo Database db PerformSetup db Th
  • python 如何打印压缩文件的百分比

    我想获取压缩文件时的百分比 例如它会打印 1 2 3 等 我不知道从哪里开始 我现在只有压缩文件的代码 该怎么做呢 Code zipPath zipfile ZipFile Files Zip pic zip w for root dirs
  • JavaScript域从子域读取cookie

    我有一个简单的问题 有没有办法通过 JavaScript 读取主域上的子域 cookie 例如 我在子域 yes something com 中设置了值为 2 的 cookie hello 之后我想在 Something com 上读取它
  • 如何在android中使用GSON解析以下JSON?

    As keysArray A B C 是dynamic and cores具有相同的对象名称 请帮忙 result success keysArray A B C D E cores A key value B key value C ke
  • Appium:在开始 appium-testng 测试运行之前,如何使用 java 在 aws device farm 设备上以编程方式创建 google 帐户

    我想在 aws 设备场上运行我的自动化 Android 套件测试用例 大部分脚本是使用 gmail 登录创建的 在实时设备上 可以手动配置 Gmail 帐户 因此每当脚本运行时 都会弹出已配置的 Gmail 帐户以供登录 但对于 aws 设
  • Pycharm:通过鼠标悬停启用变量/名称/标记的工具提示?

    我正在寻找类似于 Visual Studio 将鼠标悬停在编辑器中的任何内容 类型信息 方法详细信息 其他有用信息等 上时显示工具提示的方式 这是 PyCharm 中的可配置选项吗 我还没有找到它 Thanks 仅可通过快速文档热键使用 对
  • 错误:eglSurfaceAttrib 未实现

    我正在尝试使用 aChartEngine 显示折线图 但是 页面显示为空白 并且我收到错误 eglSurfaceAttrib 未实现 进度 显示 页面代码
  • 如何比较批处理文件中的两个文件?

    如何比较批处理文件中的两个文件 并根据它们是否匹配执行操作 我尝试过类似的事情 if file1 txt NEQ file2 txt goto label 但它比较实际的字符串 file1 txt 而不是文件 我读过有关 COMP 命令的内
  • 我应该何时保存 Windows Phone 7 上的设置?

    我有一个调用的设置保存方法 但我尝试卸载 并且失去焦点 应用程序将关闭并且在使用这两种方法之前不会保存 我应该什么时候保存应用程序设置以避免这种情况发生 我应该使用计时器并每 30 秒保存一次 还是什么 您保存的频率取决于您的应用程序 然而
  • 创建 MySQL 表时出现语法错误

    也许我太习惯 Postgres 但为什么我会收到此错误 您的 SQL 语法有错误 检查手册 与您的 MySQL 服务器版本相对应 以便使用正确的语法 靠近 id int not null AUTO INCRMENT 电子邮件 varchar
  • Gradle 可以按特定顺序运行两个测试吗?

    我们正在将一些 ant 构建脚本迁移到 gradle 并在此过程中诊断问题 出现的一个问题是 在 CI 服务器 运行 gradle 的 jenkins 上 我们偶尔会遇到测试失败的情况 我们认为该问题与测试执行顺序有关 因为失败的测试之一在
  • 增强线程池

    我的应用程序需要一个线程池 并且我想尽可能依赖标准 C 11 或 boost 的东西 我意识到有一个非官方的 boost线程池类 它基本上解决了我所需要的 但是我宁愿避免它 因为它不在boost库本身中 为什么它仍然不在核心库中很多年 在此
  • 将 python 的默认版本从 32 位更改为 64 位

    我正在尝试将默认的 python exe 从 32 位切换到 64 位 我第一次下载并安装 python 时 我下载的是 32 位版本 后来我在我目前正在进行的项目中发现 我需要 64 位版本的 python 才能使所有内容兼容 我已经卸载
  • 使用 sscanf 解析文本文件的整数和浮点值

    我想将包含这些字段的文件解析为整数和浮点变量 我尝试使用 fscanf strtok sscanf 来执行此操作 但它们都不起作用 文件的一些行 fed18 5 7 12 7 144997 8087 267345 100776 fedora
  • 删除数组中的元素而不对索引进行硬编码?在斯威夫特

    这是我的第一篇文章 我很高兴加入这个社区 我正在通过 Ray Wenderlich 的视频教程学习 Swift 我在第 3 课中遇到的挑战是删除数组中的元素而不对索引进行硬编码 我理解雷提供的正确答案 但只是不明白为什么我的答案不起作用 请