相关疑难解决方法(0)

Swift do-try-catch语法

我尝试了解swift 2中的新错误处理事情.这是我做的:我首先声明了一个错误枚举:

enum SandwichError: ErrorType {
    case NotMe
    case DoItYourself
}
Run Code Online (Sandbox Code Playgroud)

然后我宣布了一个抛出错误的方法(不是一个例外的人.这是一个错误.).这是方法:

func makeMeSandwich(names: [String: String]) throws -> String {
    guard let sandwich = names["sandwich"] else {
        throw SandwichError.NotMe
    }

    return sandwich
}
Run Code Online (Sandbox Code Playgroud)

问题来自呼叫方.以下是调用此方法的代码:

let kitchen = ["sandwich": "ready", "breakfeast": "not ready"]

do {
    let sandwich = try makeMeSandwich(kitchen)
    print("i eat it \(sandwich)")
} catch SandwichError.NotMe {
    print("Not me error")
} catch SandwichError.DoItYourself {
    print("do it error")
}
Run Code Online (Sandbox Code Playgroud)

do行编译器说完之后Errors thrown from here are not handled because the enclosing …

swift swift2

157
推荐指数
2
解决办法
12万
查看次数

如何在Swift中正确使用类扩展?

在Swift中,我历史上使用扩展来扩展封闭类型并提供方便的,无逻辑的功能,如动画,数学扩展等.但是,由于扩展是硬依赖性遍布整个代码库,我总是在实现之前三次思考某事作为延伸.

最近,我已经看到Apple建议在更大程度上使用扩展,例如将协议实现为单独的扩展.

也就是说,如果你有一个实现协议B的A类,你最终会得到这样的设计:

class A {
    // Initializers, stored properties etc.
}

extension A: B {
    // Protocol implementation
}
Run Code Online (Sandbox Code Playgroud)

当你进入那个兔子洞时,我开始看到更多基于扩展的代码,例如:

fileprivate extension A {
    // Private, calculated properties
}

fileprivate extension A {
    // Private functions
}
Run Code Online (Sandbox Code Playgroud)

我的一部分就像你在单独的扩展中实现协议时获得的构建块.它使得该类的独立部分非常独特.但是,只要继承此类,就必须更改此设计,因为无法覆盖扩展函数.

我认为第二种方法是......有趣.一旦它成功,那就是你不需要注释每个私有属性并将其作为私有属性,因为你可以为扩展指定.

但是,这种设计还会分割存储和非存储的属性,公共和私有函数,使类的"逻辑"更难遵循(我知道写较小的类).这与子类化问题一起使我在延伸仙境的门廊上停了下来.

很想听听Swift社区如何看待扩展.你怎么看?有一个银色的小礼物吗?

system-design ios swift swift-extensions

16
推荐指数
2
解决办法
8372
查看次数

为什么我们要使用扩展添加协议一致性?

如果我有一个类Christmas和一个协议Merry,为了使Christmas符合Merry,许多人会这样做:

class Christmas {
    ...
}

extension Christmas: Merry {
    ...
} 
Run Code Online (Sandbox Code Playgroud)

它也受到Apple的鼓励.

但是,在定义类时,让类符合协议是不是更方便?像这样:

class Christmas: Merry {
    ...
}
Run Code Online (Sandbox Code Playgroud)

两种方法有什么区别?

swift

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

标签 统计

swift ×3

ios ×1

swift-extensions ×1

swift2 ×1

system-design ×1