1 | struct S { |
---|
2 | var i : Int, j : Int |
---|
3 | } |
---|
4 | var s = S( i : 3, j : 5 ) |
---|
5 | enum ADT { |
---|
6 | case I(Int) // int |
---|
7 | case F(Float) // float |
---|
8 | case S(S) // struct |
---|
9 | } |
---|
10 | var adt : ADT |
---|
11 | adt = ADT.I( 3 ); print( adt ) |
---|
12 | adt = .F( 3.5 ); print( adt ) |
---|
13 | adt = .S( s ); print( adt ) |
---|
14 | switch adt { |
---|
15 | case .I(let i): print( i ) |
---|
16 | case .F(let f): print( f ) |
---|
17 | case .S(let s): print( s.i, s.j ) |
---|
18 | } |
---|
19 | |
---|
20 | enum Week: Comparable { |
---|
21 | case Mon, Tue, Wed, Thu, Fri, Sat, Sun // unit-type |
---|
22 | func isWeekday() -> Bool { return self <= .Fri } // method |
---|
23 | func isWeekend() -> Bool { return .Sat <= self } // method |
---|
24 | }; |
---|
25 | var week : Week = Week.Mon; |
---|
26 | |
---|
27 | if week == .Mon { |
---|
28 | print( week ); |
---|
29 | } |
---|
30 | if week <= .Fri { |
---|
31 | print( "weekday" ); |
---|
32 | } |
---|
33 | if .Sat < week { |
---|
34 | print( "weekend" ); |
---|
35 | } |
---|
36 | switch week { // exhaustive |
---|
37 | case .Mon: print( "Mon" ) |
---|
38 | case .Tue: print( "Tue" ) |
---|
39 | case .Wed: print( "Wed" ) |
---|
40 | case .Thu: print( "Thu" ) |
---|
41 | case .Fri: print( "Fri" ) |
---|
42 | case .Sat: print( "Sat" ) |
---|
43 | case .Sun: print( "Sun" ) |
---|
44 | } |
---|
45 | |
---|
46 | enum WeekI: Comparable, CaseIterable { |
---|
47 | case Mon, Tue, Wed, Thu, Fri, Sat, Sun // unit-type |
---|
48 | }; |
---|
49 | var weeki : WeekI = WeekI.Mon; |
---|
50 | if weeki <= .Fri { |
---|
51 | print( "weekday" ); |
---|
52 | } |
---|
53 | for day in WeekI.allCases { |
---|
54 | print( day, terminator:" " ) |
---|
55 | } |
---|
56 | print( "" ) |
---|
57 | |
---|
58 | print( WeekI.allCases.count, WeekI.allCases ) |
---|
59 | |
---|
60 | enum WeekInt: Int, CaseIterable { |
---|
61 | case Mon, Tue, Wed, Thu = 10, Fri, |
---|
62 | Sat = 4, Sun // auto-incrementing |
---|
63 | }; |
---|
64 | var weekInt : WeekInt = WeekInt.Mon; |
---|
65 | print( WeekInt.Thu.rawValue ); |
---|
66 | for day in WeekInt.allCases { |
---|
67 | print( day.rawValue, terminator:" " ) |
---|
68 | } |
---|
69 | print( "" ) |
---|
70 | |
---|
71 | enum WeekStr: String, CaseIterable { |
---|
72 | case Mon = "MON", Tue, Wed, Thu, Fri, |
---|
73 | Sat = "SAT", Sun |
---|
74 | }; |
---|
75 | for day in WeekStr.allCases { |
---|
76 | print( day.rawValue, terminator:" " ) |
---|
77 | } |
---|
78 | print( "" ) |
---|
79 | |
---|
80 | if let opt = WeekInt( rawValue: 0 ) { |
---|
81 | print( weekInt.rawValue, opt ) |
---|
82 | } else { |
---|
83 | print( "invalid weekday lookup" ) |
---|
84 | } |
---|
85 | |
---|
86 | // Local Variables: // |
---|
87 | // compile-command: "swift test.swift" // |
---|
88 | // End: // |
---|