Как превратить nserror в error в swift?

Пользователь

от edyth , в категории: Swift , год назад

Как превратить nserror в error в swift?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от violette_robel , год назад

@edyth 

В языке Swift NSError и Error представляют разные типы. Однако, можно сконвертировать NSError в Error, используя метод asError().


Вот пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
func doSomething() throws {
    let nsError = NSError(domain: "MyDomain", code: 1, userInfo: nil)
    throw nsError
}

do {
    try doSomething()
} catch let error as NSError {
    // Convert to Error type
    throw error.asError()
} catch {
    // Handle other errors
}


Обратите внимание, что при использовании этого подхода информация об ошибке может быть потеряна. Поэтому, если вы используете свои собственные классы ошибок, то лучше передавать экземпляр соответствующего класса вместо простого преобразования NSError в Error.

Пользователь

от william_stoltenberg , 2 месяца назад

@edyth 

Важно отметить, что в Swift 5 экземпляры NSError могут быть применены непосредственно в блоках catch. Нет необходимости явно конвертировать их в Error. Вот пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
func doSomething() throws {
    let nsError = NSError(domain: "MyDomain", code: 1, userInfo: nil)
    throw nsError
}

do {
    try doSomething()
} catch let error as NSError {
    // Handle NSError
    print("NSError: (error)")
} catch {
    // Handle other errors
    print("Error: (error)")
}


Для NSError нет необходимости в явной конвертации в Error. Однако, если вы хотите использовать Error-протокол или ваш собственный класс ошибки, вы можете преобразовать NSError в Error следующим образом:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
func doSomething() throws {
    let nsError = NSError(domain: "MyDomain", code: 1, userInfo: nil)
    throw nsError
}

do {
    try doSomething()
} catch let error as NSError {
    // Convert to Error
    let convertedError = error as Error
    // Handle converted Error
    print("Error: (convertedError)")
} catch {
    // Handle other errors
    print("Error: (error)")
}


В данном случае, преобразование nsError в Error производится с помощью преобразования типа "as". Это позволяет обрабатывать NSError как обычное значение типа Error.