相关疑难解决方法(0)

通过可选绑定在Swift中进行安全(边界检查)数组查找?

如果我在Swift中有一个数组,并尝试访问超出范围的索引,则会出现一个不足为奇的运行时错误:

var str = ["Apple", "Banana", "Coconut"]

str[0] // "Apple"
str[3] // EXC_BAD_INSTRUCTION
Run Code Online (Sandbox Code Playgroud)

但是,我会想到Swift带来的所有可选链接和安全性,这样做会很简单:

let theIndex = 3
if let nonexistent = str[theIndex] { // Bounds check + Lookup
    print(nonexistent)
    ...do other things with nonexistent...
}
Run Code Online (Sandbox Code Playgroud)

代替:

let theIndex = 3
if (theIndex < str.count) {         // Bounds check
    let nonexistent = str[theIndex] // Lookup
    print(nonexistent)   
    ...do other things with nonexistent... 
}
Run Code Online (Sandbox Code Playgroud)

但事实并非如此 - 我必须使用ol' if语句来检查并确保索引小于str.count.

我尝试添加自己的subscript()实现,但我不知道如何将调用传递给原始实现,或者不使用下标符号来访问项目(基于索引):

extension Array {
    subscript(var index: Int) …
Run Code Online (Sandbox Code Playgroud)

xcode swift

252
推荐指数
10
解决办法
7万
查看次数

对于不抛出的方法的Swift错误处理

如何处理未明确抛出的方法或代码的错误?

将其包装为do/catch块会导致编译器警告:

"'catch' block is unreachable because no errors are thrown in 'do' block"
Run Code Online (Sandbox Code Playgroud)

来自C#/ JAVA背景,至少可以说这是一个奇怪的事.作为开发人员,我应该能够在do/catch块中保护和包装任何代码块.仅仅因为方法未明确标记为"throw"并不意味着不会发生错误.

error-handling swift do-catch

17
推荐指数
4
解决办法
7125
查看次数

在Swift中捕获所有错误,异常,无论它是什么

我是Swift的新手,我有一点问题.

我有一段代码,任何行都可能抛出错误.

我的问题是,我不希望逐行捕获每个错误,我想在一个语句中捕获它们.

在python中你可以做到这一点

try:
    exampleArray = [1,2,3,4]
    print(exampleArray[4])
except Exception as e:
    print(e)
    pass
Run Code Online (Sandbox Code Playgroud)

这样做是尝试从不存在的数组中打印一个值,但它被except语句捕获,我想知道Swift中是否存在这么简单的东西

为了澄清,我不是想捕捉index out of range错误,我只是想捕捉错误,无论它是什么.

是否可以在不声明我自己的错误的情况下逐行抛出它们?

swift

6
推荐指数
1
解决办法
1071
查看次数

Swift Catch运行时异常

我正在对应用程序运行模糊测试,因此我正在寻找未处理的运行时错误.该应用程序是用ObjC和Swift编写的,但单元测试是用Swift编写的.

我理解swift的基础不是捕获任意运行时异常,但这纯粹是为了单元测试.如何捕获运行时这些异常(即索引越界等)

objective-c swift

3
推荐指数
1
解决办法
1199
查看次数

检查数组CAN是否在给定索引处具有元素的快速方法?

为了防止潜在的崩溃,每当我尝试访问阵列中的特定元素时,我通常会进行一些安全检查.我才意识到我已经厌倦了这样做.有没有办法快速安全地完成?

var array:[String] = [/*Filled with stuff*/]
func someFunc(someIndex:Int){

    //This is unsafe. It will crash if index is negative or larger than count.
    let text = array[someIndex]

    //This is completely safe, but boring.
    let text:String
    if someIndex >= 0 && someIndex < array.count{
        text = array[someIndex] 
    }else { return }

    //What I want is something like this:
    let text = array.hasElement(at: someIndex) ? array[someIndex] : return
    //I know, I can't really put a 'return' in a statement like this, but …
Run Code Online (Sandbox Code Playgroud)

arrays ios swift

1
推荐指数
1
解决办法
84
查看次数

标签 统计

swift ×5

arrays ×1

do-catch ×1

error-handling ×1

ios ×1

objective-c ×1

xcode ×1