gpt4 book ai didi

ios - 在不对索引进行硬编码的情况下删除数组中的元素?在 swift

转载 作者:搜寻专家 更新时间:2023-10-31 22:03:53 25 4
gpt4 key购买 nike

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

正确答案:

// 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”——这基本上意味着当它没有找到匹配项时,它将返回nil

为了防止您在某些不知道如何处理的地方意外使用nil,该语言将可选类型视为一种独特的类型。简而言之,您必须在获取可选值时检查是否为 nil。

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

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

如果您确定可选项不是nil(比如您正在检查您刚刚插入的内容),您可以使用“强制解包”来获取可选值之外的值(如果它是 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!)

关于ios - 在不对索引进行硬编码的情况下删除数组中的元素?在 swift ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24741508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com