1

我正在寻找一种改进这种代码模式的方法:

struct Struct {
    let i: Int

    init?(i: Int?) {
        guard let unwrappedI = i else { return nil }
        self.i = unwrappedI
    }
}

unwrappedI删除临时变量会很好。有什么建议么?

4

2 回答 2

3

我会说:

struct Struct {
    let i: Int

    init?(i: Int?) {
        if i == nil {return nil}
        self.i = i!
    }
}

我认为这抓住了你最初想要提前退出的愿望,避免了if/else你试图避免的,没有中间变量。要打开包装i,只需打开它!不需要if letguard let任何花哨的东西。

(另一方面,我不得不问:如果传递nil给初始化程序被认为是失败的,为什么首先要接受 Optional ?)

于 2017-01-03T03:07:47.340 回答
1

好吧,我肯定想多了……我需要睡觉。

struct Struct {
    let i: Int

    init?(i: Int?) {
        if let i = i { self.i = i }
        else { return nil }
    }
}
于 2017-01-03T03:01:11.720 回答