william-weng/wweither
- [Imitating Rust's Either function, the Swift language can also have the function of choosing between two options.
[Introduction - 簡介](https://swiftpackageindex.com/William-Weng)
- [Imitating Rust's Either function, the Swift language can also have the function of choosing between two options.
](https://docs.rs/either/latest/either/enum.Either.html)
[WWEither]
Installation with Swift Package Manager
dependencies: [
.package(url: "https://github.com/William-Weng/WWEither.git", .upToNextMajor(from: "1.0.0"))
][Example](https://ezgif.com/video-to-webp)
import UIKit
import WWPrint
import WWEither
final class ViewController: UIViewController {
private struct Member {
let id: Int
let name: String
}
override func viewDidLoad() {
super.viewDidLoad()
demo1()
demo2()
demo3()
}
}
private extension ViewController {
func demo1() {
let vipInfo = memberInfo(isVIP: true)
let normalInfo = memberInfo(isVIP: false)
switch vipInfo {
case .left(let message): wwPrint("VIP訊息: \(message)")
case .right(let level): wwPrint("會員等級: \(level)")
}
switch normalInfo {
case .left(let message): wwPrint("VIP訊息: \(message)")
case .right(let level): wwPrint("會員等級: \(level)")
}
}
func demo2() {
let either: WWEither<Int, String> = .left(42)
let mapped = either.mapLeft { number in return "數字是:\(number)" }
wwPrint(mapped)
}
func demo3() {
let memberInfo: WWEither<Int, String> = .left(123)
let fullMemberInfo = memberInfo.mapLeft { Member(id: $0, name: "預設會員") }
switch fullMemberInfo {
case .left(let member): wwPrint("會員資訊:ID = \(member.id), 名稱 = \(member.name)")
case .right(let message): wwPrint("訊息:\(message)")
}
}
}
private extension ViewController {
func memberInfo(isVIP: Bool) -> WWEither<String, Int> {
if isVIP { return .left("VIP會員") }
return .right(1)
}
}Package Metadata
Repository: william-weng/wweither
Default branch: main
README: README.md