SwiftのFailable Initializerで、初期化するメンバーが多いとき

ぱっと検索できる範囲でinit?のサンプルを眺めていると、
初期化するメンバー変数が少なく、楽な感じなので不自由なさそうだったけれど、
メンバーが増えてくると煩わしさが倍々で増えていく気がして嫌だった。
例えば以下

class Test {
    
    let member0: Int
    let member1: Int
    let member2: Int
    let member3: Int

    init?( arg0: Int?, arg1: Int?, arg2: Int?, arg3: Int? ) {
        guard
            let m0 = arg0,
            let m1 = arg1,
            let m2 = arg2,
            let m3 = arg3
            else { return nil }
        member0 = m0
        member1 = m1
        member2 = m2
        member3 = m3
    }

}

そこで以下の様にしてみたところ、一対一にはなった。
好き嫌いは分かれると思う。

enum OptionalToExceptionError: Error {
    case failure
}

public func fromOptional<T>(_ optionalTypeValue: T? ) throws -> T {
    if let nonOptionalValue = optionalTypeValue {
        return nonOptionalValue
    } else {
        throw OptionalToExceptionError.failure
    }
}

class TestAlt {
    let member0: Int
    let member1: Int
    let member2: Int
    let member3: Int

    init?( arg0: Int?, arg1: Int?, arg2: Int?, arg3: Int? ) {
        do {
            member0 = try fromOptional( arg0 )
            member1 = try fromOptional( arg1 )
            member2 = try fromOptional( arg2 )
            member3 = try fromOptional( arg3 )
        } catch _ {
            return nil
        }
    }
}

書いてはみたものの、標準ライブラリにありそうな気がする。まだ探していない。