swift中的错误处理 - 没有参数或错误的参数

时间:2017-09-26 06:55:36

标签: swift error-handling

这是一个简单的代码。如果出现问题,如何设置默认值?

d

例如,如果我在没有参数enum direction { case north, west, east, south } let defaultDirection = direction.north func printDirection(parameters: [Any]) { let dir = parameters[0] as! direction //if error then dir = defaultDirection switch dir { case .north: print("north") case .east: print("east") case .west: print("west") case .south: print("south") } } printDirection(parameters: [direction.east]) 的情况下调用,或者我没有存储方向类型值printDirection(parameters: [])

3 个答案:

答案 0 :(得分:1)

在Swift中,如果方法未标记为throws,则无法捕获任何错误。因此,您应该使用if语句检查每个(数组长度,强制转换)。

let dir: direction
if let firstParameter = parameter.first? as? direction {
    dir = firstParameter
} else {
    dir = defaultDirection
}

答案 1 :(得分:1)

如果您强制转换为Direction <{1}}的元素,那么您肯定会在某个时候出错。

代码:

Direction

绝对不是一个好主意。

您可以使用let dir = parameters[0] as! Direction 构建对象而不是强制转换,并在元素不存在时处理这种情况,以便它不会返回rawValue这是默认行为)。

说你有一个水果的枚举:

nil

正如你可以在这里,只要价值不是我想要的东西,我就会使用我的枚举enum Fruit: String { case apple = "apple" case banana = "banana" case mango = "mango" case cherry = "cherry" init(rawValue: String) { switch rawValue { case "apple" : self = .apple case "banana" : self = .banana case "mango" : self = .mango case "cherry" : self = .cherry default: self = .apple } } } 来返回“苹果”。

现在你可以这样做:

init

当然,您可以以类似的方式在函数中使用它:)

注意:请注意,当您的水果名称为 let fruit = Fruit(rawValue: "pear") print(fruit) // Prints "apple" because "pear" is not one of the fruits that I defined in my enum. let otherFruit = Fruit(rawValue: "banana") print(otherFruit) // Prints "banana" (或任何其他非String类型时,您仍需处理此案例)因为nil 确实需要rawValue。在使用String尝试构建水果之前,您可以使用if或guard语句来检查它是否为String

答案 2 :(得分:0)

我认为最好的是:

public void downloadFile(final String url, final String targetPath) throws IOException {

    final URL website = new URL(url);
    final Path target = Paths.get(targetPath);
    System.out.println(target.toAbsolutePath().toString());
    try (InputStream in = website.openStream()) {
        Files.copy(in, target, StandardCopyOption.REPLACE_EXISTING);
    }
}

//You can call the function
downloadFile("http://vrijeme.hr/hrvatska_n.xml", "NewFile.xml");