Swift 4报错:无法对类型'[Int]'的非可选值使用可选链式调用
嘿,我来帮你搞定这个Swift 4的问题!听起来你是想从数组里挑三个数字中的某一个,触发打印"Hello World"的逻辑,但碰到错误了对吧?我先梳理几个常见的坑,再给你靠谱的示例代码。
常见问题排查与解决方案
1. 数组索引越界崩溃
这绝对是Swift新手最常踩的坑之一!比如你的数组是[1,2,3],它的合法索引是0、1、2,如果你不小心用了索引3去取值,程序直接就崩溃了。所以手动选索引的时候,一定要先校验索引范围。
2. 条件判断逻辑失效
比如你想判断选中的数字是不是数组里的三个之一,但条件写得不对(比如类型不匹配,或者判断逻辑写错),导致print("Hello World")根本没执行。
正确示例代码
我给你写三种常见的实现方式,你可以根据自己的需求选:
方式一:随机选取数组中的数字并打印
// 先定义包含三个数字的数组 let targetNumbers = [5, 8, 10] // 这里可以换成你想要的三个数字 // 安全获取随机元素(Swift 4.2+支持,数组为空时返回nil,所以用if let解包) if let pickedNumber = targetNumbers.randomElement() { // 因为是从数组里取的,肯定是三个数字之一,直接打印 print("Hello World") // 也可以加个打印看看选的是哪个数字 print("选中的数字是:\(pickedNumber)") }
方式二:手动指定索引选取(避免越界)
let targetNumbers = [5, 8, 10] let chosenIndex = 2 // 选数组里的第三个元素(索引从0开始) // 先校验索引是否在合法范围内 if chosenIndex >= 0 && chosenIndex < targetNumbers.count { let pickedNumber = targetNumbers[chosenIndex] print("Hello World") print("选中的数字是:\(pickedNumber)") } else { print("哎呀,索引越界了!请选0到\(targetNumbers.count - 1)之间的索引哦") }
方式三:判断某个数字是否是数组中的三个之一
如果你的场景是“输入一个数字,判断是不是那三个中的一个,是就打印”,可以这么写:
let targetNumbers = [5, 8, 10] let inputNumber = 8 // 这里可以换成用户输入或者其他来源的数字 if targetNumbers.contains(inputNumber) { print("Hello World") } else { print("这个数字不在目标数组里哦") }
如果你的错误不是这些情况,可以把具体的错误信息和你的代码贴出来,我再帮你细化解决!
内容的提问来源于stack exchange,提问作者pillarman38
相关产品推荐
相关产品推荐

