Skip to content

Commit d7c513d

Browse files
committed
add Package and Sources
1 parent d891a84 commit d7c513d

File tree

5 files changed

+109
-0
lines changed

5 files changed

+109
-0
lines changed

Package.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import PackageDescription
2+
3+
let package = Package(
4+
name: "O2PlayingCard"
5+
)

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# O2PlayingCard

Sources/O2PlayingCard.swift

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
public struct O2PlayingCard {
2+
let rank: O2Rank
3+
let suit: O2Suit
4+
}
5+
6+
7+
// MARK: - Equatable
8+
9+
extension O2PlayingCard: Equatable {}
10+
11+
public func ==(lhs:O2PlayingCard, rhs: O2PlayingCard) -> Bool {
12+
return lhs.rank == rhs.rank && lhs.suit == rhs.suit
13+
}
14+
15+
// MARK: - Comparable
16+
extension O2PlayingCard: Comparable {}
17+
18+
public func <(lhs: O2PlayingCard, rhs: O2PlayingCard) -> Bool {
19+
return lhs.suit < rhs.suit || (lhs.suit == rhs.suit && lhs.rank < rhs.rank)
20+
}
21+
22+
// MARK: - CustomStringConvertible
23+
24+
extension O2PlayingCard: CustomStringConvertible {
25+
public var description: String {
26+
return "\(suit)\(rank)"
27+
}
28+
}

Sources/O2Rank.swift

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
public enum O2Rank: Int {
2+
case Ace = 1
3+
case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
4+
case Jack, Queen, King
5+
}
6+
7+
// MARK: - Comparable
8+
9+
extension O2Rank: Comparable {}
10+
11+
public func <(lhs: O2Rank, rhs: O2Rank) -> Bool {
12+
switch (lhs,rhs) {
13+
case (_, _) where lhs == rhs:
14+
return false
15+
case (.Ace, _):
16+
return false
17+
default:
18+
return lhs.rawValue < rhs.rawValue
19+
}
20+
}
21+
22+
// MARK: - CustomStringConvertible
23+
24+
extension O2Rank: CustomStringConvertible {
25+
public var description: String {
26+
switch self {
27+
case .Ace:
28+
return "A"
29+
case .Jack:
30+
return "J"
31+
case .Queen:
32+
return "Q"
33+
case .King:
34+
return "K"
35+
default:
36+
return "\(rawValue)"
37+
}
38+
}
39+
}
40+

Sources/O2Suit.swift

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
public enum O2Suit: String {
2+
case Spades, Hearts, Diamonds, Clubs
3+
}
4+
5+
// MARK: - Comparable
6+
7+
extension O2Suit: Comparable {}
8+
9+
public func<(lhs: O2Suit, rhs: O2Suit) -> Bool {
10+
switch (lhs, rhs) {
11+
case (_, _) where lhs == rhs:
12+
return false
13+
case (.Spades, _), (.Hearts, .Diamonds), (.Hearts, .Clubs), (.Diamonds, .Clubs):
14+
return false
15+
default:
16+
return true
17+
}
18+
}
19+
20+
21+
// MARK: - CustomStringConvertible
22+
extension O2Suit: CustomStringConvertible {
23+
public var description: String {
24+
switch self {
25+
case .Spades:
26+
return "♠︎"
27+
case .Hearts:
28+
return ""
29+
case .Diamonds:
30+
return ""
31+
case .Clubs:
32+
return "♣︎"
33+
}
34+
}
35+
}

0 commit comments

Comments
 (0)