这是一个简单的代码。如果出现问题,如何设置默认值?
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: [])
答案 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");