понедельник, 29 июня 2020 г.

Swift, Enumerations, Result

Online Swift Playground 

//enumeration - value type
import Foundation

enum Week: String {
    case monday = "first"
    case tuesday = "second"
    case wednesday = "third"
    case thursday = "forth"
    case friday = "fifth"
    case saturday = "sixth"
    case sunday = "seventh"

    var weekPart: String {
        switch self{
        case .monday, .tuesday, .wednesday, .thursday, .friday:
            return "workday \(rawValue) day"
        case .saturday, .sunday:
            return "weekend \(rawValue) day"
        }
    }
}

enum Workdays: Int, CaseIterable {
    case monday = 1, tuesday, wednesday, thursday, friday

    var daysUntilWeekend: Int {
        return 5 - self.rawValue
    }

    static func daysUntilWeekend(day: Self) -> Int{
        return 5 - day.rawValue
    }
}

func weekPart(for day: Week) -> String {
    switch day{
        case .monday, .tuesday, .wednesday, .thursday, .friday:
            return "workday"
        case .saturday, .sunday:
            return "weekend"
    }
}

print(Week.monday)
print(Week.friday.rawValue)
print(Week(rawValue: "fifth")!)
print(Workdays.friday.rawValue)
print(Workdays.thursday.daysUntilWeekend)
print(Workdays.daysUntilWeekend(day: Workdays.thursday))
print(weekPart(for: Week.monday))
print(Week.sunday.weekPart)


for day in Workdays.allCases{
    print(day)
}

//Result
enum intResult {
    case OK(_: Int)
    case Err(_: String)
}

func check(num: Int) -> intResult{
    if num <= 10 {
        return .OK(num)
    }else{
        return .Err("error message")
    }
}

let result = check(num: 5)
switch result {
    case .OK(let num):
        print(num)
    case .Err(let message):
        print(message)
}

func check2(res: intResult) -> Int{
    guard case .OK(let num) = res else { fatalError("error")}
    return num
}
print(check2(res: result))

//init
enum initCase{
    case on, off
    init(){
        self = .off
    }
}
var e1 = initCase()
print(e1)
e1 = initCase.on
print(e1)

enum noCase{
    static func hi(){
        print("no instance!")
    }
}
//var e2 = noCase() //error
noCase.hi()

//Optional
enum intOpt {
    case Some(_: Int)
    case None(_: Void)
}
var o1 = intOpt.Some(5)
print(o1)
o1 = intOpt.None(())
print(o1)
switch o1 {
    case .Some(let x):
        print(x)
    case .None(()):
        print("nil")
}

Комментариев нет:

Отправить комментарий