我可以在 `map` 和 `flatMap` 函数中做一些不是 `transform` 的事情吗?

Can I do something not `transfrom` in `map` and `flatMap` function?

Optional在Swift中的Map功能是不是刚用在transform上?

如果我想做某事只是 Optional 有一些价值,我可以使用 map 功能吗?如果不是,为什么?

根据苹果的例子,我们这样使用map

let possibleNumber: Int? = Int("42")
possibleNumber.map { [=10=] * [=10=] }

我可以这样用吗? : (如有不妥,如何解释)

func setImage(with data: Data?) {
   data.flatMap { UIImage(data: [=11=]) }
        .map { imageView.image = [=11=] }
}

另外map函数应该return一个值,但是为什么这个函数没有任何warning未使用的结果(比如result of call map{...} is unused)?

你当然可以做到,只是不太传统。当人们看到 map 时,他们会先入为主地期待它会进行转换。您违反了该期望,但从技术上讲 "wrong" 没有任何问题。

就个人而言,我更喜欢使用此扩展程序:

extension Optional {
    /// An enum used to ensure that `ifNone` is never called before `ifSome`.
    enum IfSomeResult {
        case some
        case none

        func ifNone(_ closure: () throws -> Void) rethrows -> Void {
            switch self {
                case .some: return
                case .none: try _ = closure()
            }
        }
    }

    @discardableResult
    func ifSome(then closure: (Wrapped) throws -> Void) rethrows -> IfSomeResult {
        if let wrapped = self {
            try _ = closure(wrapped)
            return IfSomeResult.some
        }
        else {
            return IfSomeResult.none
        }
    }

    func ifNone(then closure: () throws -> Void) rethrows -> Void {
        if case nil = self { try _ = closure() }
    }
}

并编写如下代码:

data.flatMap { UIImage(data: [=11=]) }
    .ifSome { imageView.image = [=11=] }

为什么它不警告未使用的值?

闭包被推断为return Void(空元组类型,其唯一值是空元组,())。编译器从不发出有关 Void 值未使用的警告。这是一个例子:

Optional(123).map { _ in () }