美文网首页iOS开发
Swift 中的函数处理

Swift 中的函数处理

作者: 楼上那位 | 来源:发表于2017-03-21 18:02 被阅读14次

    刚接触Swift 可能很少知道怎么处理错误,很多同学会觉得这不就是跟OC 的一样吗,

    NSError *err = nil;
    NSString *fileStuff = [[NSString alloc] initWithContentsOfFile:@"someFile.txt" encoding:NSUTF8StringEncoding error:&err];
    

    确实,像上面这段代码如果你对错误不关心的话,直接传递 nil 就行。


    Swift 中 我们应该怎么定义错误,遇到错误又该怎样处理呢?

    我们先看个例子:

    enum FileReadingError: ErrorType {
     case FileNotFound
     case PermissionDeny
     case FileCorrupted
    }
    

    接着创建一个只抛出错误的函数

     func pretendToReadTestFile () throw -> NSData {
       throw FileReadingError.FileNotFound
    }
    

    注意这里的throw-> 之前.
    一般我们这样使用

    let data = try pretendToReadTestFile()
    

    可是怎么处理呢?

    1. 抛给调用者处理
    2. 针对特定错误进行处理
    3. 针对所有错误进行处理
    抛出错误
    func getDataFromSomething() throws -> NSData {
        
        let data = try pretendToReadTestFile()
        
        return data
    }
    

    处理特定的错误

    do {
    let someValue = try pretendReadTestFile()
    } catch FileReadingError.FileNotFound {
     print("not found")
    }
    

    处理所有错误

    do {
        let someData = try pretendToReadTestFile()
    } catch {
        print("Something weird happened.")
    }
    

    如果我们想得到一个可选值呢?

    如果我们不关心错误,我们只关心是否有返回值,可以这样处理

    let optionalData = try?pretendToReadTestFile()
    // If there was an error, I don’t care what it is, just set the value to nil
    

    当然有 ? 就有 ! 两个配对不是

    so

    let optionalData = try! pretendToReadTestFile()
    // 强制解包,必须保证方法有返回值
    

    相关文章

      网友评论

        本文标题:Swift 中的函数处理

        本文链接:https://www.haomeiwen.com/subject/qymgnttx.html