mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-28 17:20:22 +00:00
Adds basic support for the Swift programming language
Text only lexer for now until Pygments catches up
This commit is contained in:
@@ -2046,6 +2046,12 @@ SuperCollider:
|
||||
extensions:
|
||||
- .scd
|
||||
|
||||
Swift:
|
||||
type: programming
|
||||
lexer: Text only
|
||||
extensions:
|
||||
- .swift
|
||||
|
||||
SystemVerilog:
|
||||
type: programming
|
||||
color: "#343761"
|
||||
|
||||
@@ -581,6 +581,9 @@
|
||||
"SuperCollider": [
|
||||
".scd"
|
||||
],
|
||||
"Swift": [
|
||||
".swift"
|
||||
],
|
||||
"SystemVerilog": [
|
||||
".sv",
|
||||
".svh",
|
||||
@@ -723,8 +726,8 @@
|
||||
".gemrc"
|
||||
]
|
||||
},
|
||||
"tokens_total": 611474,
|
||||
"languages_total": 755,
|
||||
"tokens_total": 612602,
|
||||
"languages_total": 798,
|
||||
"tokens": {
|
||||
"ABAP": {
|
||||
"*/**": 1,
|
||||
@@ -61881,6 +61884,260 @@
|
||||
"wait": 1,
|
||||
".fork": 1
|
||||
},
|
||||
"Swift": {
|
||||
"let": 43,
|
||||
"apples": 1,
|
||||
"oranges": 1,
|
||||
"appleSummary": 1,
|
||||
"fruitSummary": 1,
|
||||
"var": 42,
|
||||
"shoppingList": 3,
|
||||
"[": 18,
|
||||
"]": 18,
|
||||
"occupations": 2,
|
||||
"emptyArray": 1,
|
||||
"String": 27,
|
||||
"(": 89,
|
||||
")": 89,
|
||||
"emptyDictionary": 1,
|
||||
"Dictionary": 1,
|
||||
"<String,>": 1,
|
||||
"Float": 1,
|
||||
"//": 1,
|
||||
"Went": 1,
|
||||
"shopping": 1,
|
||||
"and": 1,
|
||||
"bought": 1,
|
||||
"everything.": 1,
|
||||
"individualScores": 2,
|
||||
"teamScore": 4,
|
||||
"for": 10,
|
||||
"score": 2,
|
||||
"in": 11,
|
||||
"{": 77,
|
||||
"if": 6,
|
||||
"+": 15,
|
||||
"}": 77,
|
||||
"else": 1,
|
||||
"optionalString": 2,
|
||||
"nil": 1,
|
||||
"optionalName": 2,
|
||||
"greeting": 2,
|
||||
"name": 21,
|
||||
"vegetable": 2,
|
||||
"switch": 4,
|
||||
"case": 21,
|
||||
"vegetableComment": 4,
|
||||
"x": 1,
|
||||
"where": 2,
|
||||
"x.hasSuffix": 1,
|
||||
"default": 2,
|
||||
"interestingNumbers": 2,
|
||||
"largest": 4,
|
||||
"kind": 1,
|
||||
"numbers": 6,
|
||||
"number": 13,
|
||||
"n": 5,
|
||||
"while": 2,
|
||||
"<": 4,
|
||||
"*": 7,
|
||||
"m": 5,
|
||||
"do": 1,
|
||||
"firstForLoop": 3,
|
||||
"i": 6,
|
||||
"secondForLoop": 3,
|
||||
";": 2,
|
||||
"println": 1,
|
||||
"func": 24,
|
||||
"greet": 2,
|
||||
"day": 1,
|
||||
"-": 21,
|
||||
"return": 30,
|
||||
"getGasPrices": 2,
|
||||
"Double": 11,
|
||||
"sumOf": 3,
|
||||
"Int...": 1,
|
||||
"Int": 19,
|
||||
"sum": 3,
|
||||
"returnFifteen": 2,
|
||||
"y": 3,
|
||||
"add": 2,
|
||||
"makeIncrementer": 2,
|
||||
"addOne": 2,
|
||||
"increment": 2,
|
||||
"hasAnyMatches": 2,
|
||||
"list": 2,
|
||||
"condition": 2,
|
||||
"Bool": 4,
|
||||
"item": 4,
|
||||
"true": 2,
|
||||
"false": 2,
|
||||
"lessThanTen": 2,
|
||||
"numbers.map": 2,
|
||||
"result": 5,
|
||||
"sort": 1,
|
||||
"class": 7,
|
||||
"Shape": 2,
|
||||
"numberOfSides": 4,
|
||||
"simpleDescription": 14,
|
||||
"myVariable": 2,
|
||||
"myConstant": 1,
|
||||
"shape": 1,
|
||||
"shape.numberOfSides": 1,
|
||||
"shapeDescription": 1,
|
||||
"shape.simpleDescription": 1,
|
||||
"NamedShape": 3,
|
||||
"init": 4,
|
||||
"self.name": 1,
|
||||
"Square": 7,
|
||||
"sideLength": 17,
|
||||
"self.sideLength": 2,
|
||||
"super.init": 2,
|
||||
"area": 1,
|
||||
"override": 2,
|
||||
"test": 1,
|
||||
"test.area": 1,
|
||||
"test.simpleDescription": 1,
|
||||
"EquilateralTriangle": 4,
|
||||
"perimeter": 1,
|
||||
"get": 2,
|
||||
"set": 1,
|
||||
"newValue": 1,
|
||||
"/": 1,
|
||||
"triangle": 3,
|
||||
"triangle.perimeter": 2,
|
||||
"triangle.sideLength": 2,
|
||||
"TriangleAndSquare": 2,
|
||||
"willSet": 2,
|
||||
"square.sideLength": 1,
|
||||
"newValue.sideLength": 2,
|
||||
"square": 2,
|
||||
"size": 4,
|
||||
"triangleAndSquare": 1,
|
||||
"triangleAndSquare.square.sideLength": 1,
|
||||
"triangleAndSquare.triangle.sideLength": 2,
|
||||
"triangleAndSquare.square": 1,
|
||||
"Counter": 2,
|
||||
"count": 2,
|
||||
"incrementBy": 1,
|
||||
"amount": 2,
|
||||
"numberOfTimes": 2,
|
||||
"times": 4,
|
||||
"counter": 1,
|
||||
"counter.incrementBy": 1,
|
||||
"optionalSquare": 2,
|
||||
".sideLength": 1,
|
||||
"enum": 4,
|
||||
"Rank": 2,
|
||||
"Ace": 1,
|
||||
"Two": 1,
|
||||
"Three": 1,
|
||||
"Four": 1,
|
||||
"Five": 1,
|
||||
"Six": 1,
|
||||
"Seven": 1,
|
||||
"Eight": 1,
|
||||
"Nine": 1,
|
||||
"Ten": 1,
|
||||
"Jack": 1,
|
||||
"Queen": 1,
|
||||
"King": 1,
|
||||
"self": 3,
|
||||
".Ace": 1,
|
||||
".Jack": 1,
|
||||
".Queen": 1,
|
||||
".King": 1,
|
||||
"self.toRaw": 1,
|
||||
"ace": 1,
|
||||
"Rank.Ace": 1,
|
||||
"aceRawValue": 1,
|
||||
"ace.toRaw": 1,
|
||||
"convertedRank": 1,
|
||||
"Rank.fromRaw": 1,
|
||||
"threeDescription": 1,
|
||||
"convertedRank.simpleDescription": 1,
|
||||
"Suit": 2,
|
||||
"Spades": 1,
|
||||
"Hearts": 1,
|
||||
"Diamonds": 1,
|
||||
"Clubs": 1,
|
||||
".Spades": 2,
|
||||
".Hearts": 1,
|
||||
".Diamonds": 1,
|
||||
".Clubs": 1,
|
||||
"hearts": 1,
|
||||
"Suit.Hearts": 1,
|
||||
"heartsDescription": 1,
|
||||
"hearts.simpleDescription": 1,
|
||||
"implicitInteger": 1,
|
||||
"implicitDouble": 1,
|
||||
"explicitDouble": 1,
|
||||
"struct": 2,
|
||||
"Card": 2,
|
||||
"rank": 2,
|
||||
"suit": 2,
|
||||
"threeOfSpades": 1,
|
||||
".Three": 1,
|
||||
"threeOfSpadesDescription": 1,
|
||||
"threeOfSpades.simpleDescription": 1,
|
||||
"ServerResponse": 1,
|
||||
"Result": 1,
|
||||
"Error": 1,
|
||||
"success": 2,
|
||||
"ServerResponse.Result": 1,
|
||||
"failure": 1,
|
||||
"ServerResponse.Error": 1,
|
||||
".Result": 1,
|
||||
"sunrise": 1,
|
||||
"sunset": 1,
|
||||
"serverResponse": 2,
|
||||
".Error": 1,
|
||||
"error": 1,
|
||||
"protocol": 1,
|
||||
"ExampleProtocol": 5,
|
||||
"mutating": 3,
|
||||
"adjust": 4,
|
||||
"SimpleClass": 2,
|
||||
"anotherProperty": 1,
|
||||
"a": 2,
|
||||
"a.adjust": 1,
|
||||
"aDescription": 1,
|
||||
"a.simpleDescription": 1,
|
||||
"SimpleStructure": 2,
|
||||
"b": 1,
|
||||
"b.adjust": 1,
|
||||
"bDescription": 1,
|
||||
"b.simpleDescription": 1,
|
||||
"extension": 1,
|
||||
"protocolValue": 1,
|
||||
"protocolValue.simpleDescription": 1,
|
||||
"repeat": 2,
|
||||
"<ItemType>": 1,
|
||||
"ItemType": 3,
|
||||
"OptionalValue": 2,
|
||||
"<T>": 1,
|
||||
"None": 1,
|
||||
"Some": 1,
|
||||
"T": 5,
|
||||
"possibleInteger": 2,
|
||||
"<Int>": 1,
|
||||
".None": 1,
|
||||
".Some": 1,
|
||||
"anyCommonElements": 2,
|
||||
"<T,>": 1,
|
||||
"U": 4,
|
||||
"Sequence": 2,
|
||||
"GeneratorType": 3,
|
||||
"Element": 3,
|
||||
"Equatable": 1,
|
||||
"lhs": 2,
|
||||
"rhs": 2,
|
||||
"lhsItem": 2,
|
||||
"rhsItem": 2,
|
||||
"label": 2,
|
||||
"width": 2,
|
||||
"widthLabel": 1
|
||||
},
|
||||
"SystemVerilog": {
|
||||
"module": 3,
|
||||
"endpoint_phy_wrapper": 2,
|
||||
@@ -66478,6 +66735,7 @@
|
||||
"Stata": 3133,
|
||||
"Stylus": 76,
|
||||
"SuperCollider": 133,
|
||||
"Swift": 1128,
|
||||
"SystemVerilog": 541,
|
||||
"Tcl": 1133,
|
||||
"Tea": 3,
|
||||
@@ -66663,6 +66921,7 @@
|
||||
"Stata": 7,
|
||||
"Stylus": 1,
|
||||
"SuperCollider": 1,
|
||||
"Swift": 43,
|
||||
"SystemVerilog": 4,
|
||||
"Tcl": 2,
|
||||
"Tea": 1,
|
||||
@@ -66686,5 +66945,5 @@
|
||||
"YAML": 2,
|
||||
"Zephir": 2
|
||||
},
|
||||
"md5": "a7d557f9fecf06444c92c22e6f32daa7"
|
||||
"md5": "e41e5530c6efe39b710ace7e1d5d318c"
|
||||
}
|
||||
4
samples/Swift/section-11.swift
Normal file
4
samples/Swift/section-11.swift
Normal file
@@ -0,0 +1,4 @@
|
||||
let apples = 3
|
||||
let oranges = 5
|
||||
let appleSummary = "I have \(apples) apples."
|
||||
let fruitSummary = "I have \(apples + oranges) pieces of fruit."
|
||||
8
samples/Swift/section-13.swift
Normal file
8
samples/Swift/section-13.swift
Normal file
@@ -0,0 +1,8 @@
|
||||
var shoppingList = ["catfish", "water", "tulips", "blue paint"]
|
||||
shoppingList[1] = "bottle of water"
|
||||
|
||||
var occupations = [
|
||||
"Malcolm": "Captain",
|
||||
"Kaylee": "Mechanic",
|
||||
]
|
||||
occupations["Jayne"] = "Public Relations"
|
||||
2
samples/Swift/section-15.swift
Normal file
2
samples/Swift/section-15.swift
Normal file
@@ -0,0 +1,2 @@
|
||||
let emptyArray = String[]()
|
||||
let emptyDictionary = Dictionary<String, Float>()
|
||||
1
samples/Swift/section-17.swift
Normal file
1
samples/Swift/section-17.swift
Normal file
@@ -0,0 +1 @@
|
||||
shoppingList = [] // Went shopping and bought everything.
|
||||
10
samples/Swift/section-19.swift
Normal file
10
samples/Swift/section-19.swift
Normal file
@@ -0,0 +1,10 @@
|
||||
let individualScores = [75, 43, 103, 87, 12]
|
||||
var teamScore = 0
|
||||
for score in individualScores {
|
||||
if score > 50 {
|
||||
teamScore += 3
|
||||
} else {
|
||||
teamScore += 1
|
||||
}
|
||||
}
|
||||
teamScore
|
||||
8
samples/Swift/section-21.swift
Normal file
8
samples/Swift/section-21.swift
Normal file
@@ -0,0 +1,8 @@
|
||||
var optionalString: String? = "Hello"
|
||||
optionalString == nil
|
||||
|
||||
var optionalName: String? = "John Appleseed"
|
||||
var greeting = "Hello!"
|
||||
if let name = optionalName {
|
||||
greeting = "Hello, \(name)"
|
||||
}
|
||||
11
samples/Swift/section-23.swift
Normal file
11
samples/Swift/section-23.swift
Normal file
@@ -0,0 +1,11 @@
|
||||
let vegetable = "red pepper"
|
||||
switch vegetable {
|
||||
case "celery":
|
||||
let vegetableComment = "Add some raisins and make ants on a log."
|
||||
case "cucumber", "watercress":
|
||||
let vegetableComment = "That would make a good tea sandwich."
|
||||
case let x where x.hasSuffix("pepper"):
|
||||
let vegetableComment = "Is it a spicy \(x)?"
|
||||
default:
|
||||
let vegetableComment = "Everything tastes good in soup."
|
||||
}
|
||||
14
samples/Swift/section-25.swift
Normal file
14
samples/Swift/section-25.swift
Normal file
@@ -0,0 +1,14 @@
|
||||
let interestingNumbers = [
|
||||
"Prime": [2, 3, 5, 7, 11, 13],
|
||||
"Fibonacci": [1, 1, 2, 3, 5, 8],
|
||||
"Square": [1, 4, 9, 16, 25],
|
||||
]
|
||||
var largest = 0
|
||||
for (kind, numbers) in interestingNumbers {
|
||||
for number in numbers {
|
||||
if number > largest {
|
||||
largest = number
|
||||
}
|
||||
}
|
||||
}
|
||||
largest
|
||||
11
samples/Swift/section-27.swift
Normal file
11
samples/Swift/section-27.swift
Normal file
@@ -0,0 +1,11 @@
|
||||
var n = 2
|
||||
while n < 100 {
|
||||
n = n * 2
|
||||
}
|
||||
n
|
||||
|
||||
var m = 2
|
||||
do {
|
||||
m = m * 2
|
||||
} while m < 100
|
||||
m
|
||||
11
samples/Swift/section-29.swift
Normal file
11
samples/Swift/section-29.swift
Normal file
@@ -0,0 +1,11 @@
|
||||
var firstForLoop = 0
|
||||
for i in 0..3 {
|
||||
firstForLoop += i
|
||||
}
|
||||
firstForLoop
|
||||
|
||||
var secondForLoop = 0
|
||||
for var i = 0; i < 3; ++i {
|
||||
secondForLoop += 1
|
||||
}
|
||||
secondForLoop
|
||||
1
samples/Swift/section-3.swift
Normal file
1
samples/Swift/section-3.swift
Normal file
@@ -0,0 +1 @@
|
||||
println("Hello, world")
|
||||
4
samples/Swift/section-31.swift
Normal file
4
samples/Swift/section-31.swift
Normal file
@@ -0,0 +1,4 @@
|
||||
func greet(name: String, day: String) -> String {
|
||||
return "Hello \(name), today is \(day)."
|
||||
}
|
||||
greet("Bob", "Tuesday")
|
||||
4
samples/Swift/section-33.swift
Normal file
4
samples/Swift/section-33.swift
Normal file
@@ -0,0 +1,4 @@
|
||||
func getGasPrices() -> (Double, Double, Double) {
|
||||
return (3.59, 3.69, 3.79)
|
||||
}
|
||||
getGasPrices()
|
||||
9
samples/Swift/section-35.swift
Normal file
9
samples/Swift/section-35.swift
Normal file
@@ -0,0 +1,9 @@
|
||||
func sumOf(numbers: Int...) -> Int {
|
||||
var sum = 0
|
||||
for number in numbers {
|
||||
sum += number
|
||||
}
|
||||
return sum
|
||||
}
|
||||
sumOf()
|
||||
sumOf(42, 597, 12)
|
||||
9
samples/Swift/section-37.swift
Normal file
9
samples/Swift/section-37.swift
Normal file
@@ -0,0 +1,9 @@
|
||||
func returnFifteen() -> Int {
|
||||
var y = 10
|
||||
func add() {
|
||||
y += 5
|
||||
}
|
||||
add()
|
||||
return y
|
||||
}
|
||||
returnFifteen()
|
||||
8
samples/Swift/section-39.swift
Normal file
8
samples/Swift/section-39.swift
Normal file
@@ -0,0 +1,8 @@
|
||||
func makeIncrementer() -> (Int -> Int) {
|
||||
func addOne(number: Int) -> Int {
|
||||
return 1 + number
|
||||
}
|
||||
return addOne
|
||||
}
|
||||
var increment = makeIncrementer()
|
||||
increment(7)
|
||||
13
samples/Swift/section-41.swift
Normal file
13
samples/Swift/section-41.swift
Normal file
@@ -0,0 +1,13 @@
|
||||
func hasAnyMatches(list: Int[], condition: Int -> Bool) -> Bool {
|
||||
for item in list {
|
||||
if condition(item) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
func lessThanTen(number: Int) -> Bool {
|
||||
return number < 10
|
||||
}
|
||||
var numbers = [20, 19, 7, 12]
|
||||
hasAnyMatches(numbers, lessThanTen)
|
||||
5
samples/Swift/section-43.swift
Normal file
5
samples/Swift/section-43.swift
Normal file
@@ -0,0 +1,5 @@
|
||||
numbers.map({
|
||||
(number: Int) -> Int in
|
||||
let result = 3 * number
|
||||
return result
|
||||
})
|
||||
1
samples/Swift/section-45.swift
Normal file
1
samples/Swift/section-45.swift
Normal file
@@ -0,0 +1 @@
|
||||
numbers.map({ number in 3 * number })
|
||||
1
samples/Swift/section-47.swift
Normal file
1
samples/Swift/section-47.swift
Normal file
@@ -0,0 +1 @@
|
||||
sort([1, 5, 3, 12, 2]) { $0 > $1 }
|
||||
6
samples/Swift/section-49.swift
Normal file
6
samples/Swift/section-49.swift
Normal file
@@ -0,0 +1,6 @@
|
||||
class Shape {
|
||||
var numberOfSides = 0
|
||||
func simpleDescription() -> String {
|
||||
return "A shape with \(numberOfSides) sides."
|
||||
}
|
||||
}
|
||||
3
samples/Swift/section-5.swift
Normal file
3
samples/Swift/section-5.swift
Normal file
@@ -0,0 +1,3 @@
|
||||
var myVariable = 42
|
||||
myVariable = 50
|
||||
let myConstant = 42
|
||||
3
samples/Swift/section-51.swift
Normal file
3
samples/Swift/section-51.swift
Normal file
@@ -0,0 +1,3 @@
|
||||
var shape = Shape()
|
||||
shape.numberOfSides = 7
|
||||
var shapeDescription = shape.simpleDescription()
|
||||
12
samples/Swift/section-53.swift
Normal file
12
samples/Swift/section-53.swift
Normal file
@@ -0,0 +1,12 @@
|
||||
class NamedShape {
|
||||
var numberOfSides: Int = 0
|
||||
var name: String
|
||||
|
||||
init(name: String) {
|
||||
self.name = name
|
||||
}
|
||||
|
||||
func simpleDescription() -> String {
|
||||
return "A shape with \(numberOfSides) sides."
|
||||
}
|
||||
}
|
||||
20
samples/Swift/section-55.swift
Normal file
20
samples/Swift/section-55.swift
Normal file
@@ -0,0 +1,20 @@
|
||||
class Square: NamedShape {
|
||||
var sideLength: Double
|
||||
|
||||
init(sideLength: Double, name: String) {
|
||||
self.sideLength = sideLength
|
||||
super.init(name: name)
|
||||
numberOfSides = 4
|
||||
}
|
||||
|
||||
func area() -> Double {
|
||||
return sideLength * sideLength
|
||||
}
|
||||
|
||||
override func simpleDescription() -> String {
|
||||
return "A square with sides of length \(sideLength)."
|
||||
}
|
||||
}
|
||||
let test = Square(sideLength: 5.2, name: "my test square")
|
||||
test.area()
|
||||
test.simpleDescription()
|
||||
26
samples/Swift/section-57.swift
Normal file
26
samples/Swift/section-57.swift
Normal file
@@ -0,0 +1,26 @@
|
||||
class EquilateralTriangle: NamedShape {
|
||||
var sideLength: Double = 0.0
|
||||
|
||||
init(sideLength: Double, name: String) {
|
||||
self.sideLength = sideLength
|
||||
super.init(name: name)
|
||||
numberOfSides = 3
|
||||
}
|
||||
|
||||
var perimeter: Double {
|
||||
get {
|
||||
return 3.0 * sideLength
|
||||
}
|
||||
set {
|
||||
sideLength = newValue / 3.0
|
||||
}
|
||||
}
|
||||
|
||||
override func simpleDescription() -> String {
|
||||
return "An equilateral triagle with sides of length \(sideLength)."
|
||||
}
|
||||
}
|
||||
var triangle = EquilateralTriangle(sideLength: 3.1, name: "a triangle")
|
||||
triangle.perimeter
|
||||
triangle.perimeter = 9.9
|
||||
triangle.sideLength
|
||||
21
samples/Swift/section-59.swift
Normal file
21
samples/Swift/section-59.swift
Normal file
@@ -0,0 +1,21 @@
|
||||
class TriangleAndSquare {
|
||||
var triangle: EquilateralTriangle {
|
||||
willSet {
|
||||
square.sideLength = newValue.sideLength
|
||||
}
|
||||
}
|
||||
var square: Square {
|
||||
willSet {
|
||||
triangle.sideLength = newValue.sideLength
|
||||
}
|
||||
}
|
||||
init(size: Double, name: String) {
|
||||
square = Square(sideLength: size, name: name)
|
||||
triangle = EquilateralTriangle(sideLength: size, name: name)
|
||||
}
|
||||
}
|
||||
var triangleAndSquare = TriangleAndSquare(size: 10, name: "another test shape")
|
||||
triangleAndSquare.square.sideLength
|
||||
triangleAndSquare.triangle.sideLength
|
||||
triangleAndSquare.square = Square(sideLength: 50, name: "larger square")
|
||||
triangleAndSquare.triangle.sideLength
|
||||
8
samples/Swift/section-61.swift
Normal file
8
samples/Swift/section-61.swift
Normal file
@@ -0,0 +1,8 @@
|
||||
class Counter {
|
||||
var count: Int = 0
|
||||
func incrementBy(amount: Int, numberOfTimes times: Int) {
|
||||
count += amount * times
|
||||
}
|
||||
}
|
||||
var counter = Counter()
|
||||
counter.incrementBy(2, numberOfTimes: 7)
|
||||
2
samples/Swift/section-63.swift
Normal file
2
samples/Swift/section-63.swift
Normal file
@@ -0,0 +1,2 @@
|
||||
let optionalSquare: Square? = Square(sideLength: 2.5, name: "optional square")
|
||||
let sideLength = optionalSquare?.sideLength
|
||||
21
samples/Swift/section-65.swift
Normal file
21
samples/Swift/section-65.swift
Normal file
@@ -0,0 +1,21 @@
|
||||
enum Rank: Int {
|
||||
case Ace = 1
|
||||
case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
|
||||
case Jack, Queen, King
|
||||
func simpleDescription() -> String {
|
||||
switch self {
|
||||
case .Ace:
|
||||
return "ace"
|
||||
case .Jack:
|
||||
return "jack"
|
||||
case .Queen:
|
||||
return "queen"
|
||||
case .King:
|
||||
return "king"
|
||||
default:
|
||||
return String(self.toRaw())
|
||||
}
|
||||
}
|
||||
}
|
||||
let ace = Rank.Ace
|
||||
let aceRawValue = ace.toRaw()
|
||||
3
samples/Swift/section-67.swift
Normal file
3
samples/Swift/section-67.swift
Normal file
@@ -0,0 +1,3 @@
|
||||
if let convertedRank = Rank.fromRaw(3) {
|
||||
let threeDescription = convertedRank.simpleDescription()
|
||||
}
|
||||
17
samples/Swift/section-69.swift
Normal file
17
samples/Swift/section-69.swift
Normal file
@@ -0,0 +1,17 @@
|
||||
enum Suit {
|
||||
case Spades, Hearts, Diamonds, Clubs
|
||||
func simpleDescription() -> String {
|
||||
switch self {
|
||||
case .Spades:
|
||||
return "spades"
|
||||
case .Hearts:
|
||||
return "hearts"
|
||||
case .Diamonds:
|
||||
return "diamonds"
|
||||
case .Clubs:
|
||||
return "clubs"
|
||||
}
|
||||
}
|
||||
}
|
||||
let hearts = Suit.Hearts
|
||||
let heartsDescription = hearts.simpleDescription()
|
||||
3
samples/Swift/section-7.swift
Normal file
3
samples/Swift/section-7.swift
Normal file
@@ -0,0 +1,3 @@
|
||||
let implicitInteger = 70
|
||||
let implicitDouble = 70.0
|
||||
let explicitDouble: Double = 70
|
||||
9
samples/Swift/section-71.swift
Normal file
9
samples/Swift/section-71.swift
Normal file
@@ -0,0 +1,9 @@
|
||||
struct Card {
|
||||
var rank: Rank
|
||||
var suit: Suit
|
||||
func simpleDescription() -> String {
|
||||
return "The \(rank.simpleDescription()) of \(suit.simpleDescription())"
|
||||
}
|
||||
}
|
||||
let threeOfSpades = Card(rank: .Three, suit: .Spades)
|
||||
let threeOfSpadesDescription = threeOfSpades.simpleDescription()
|
||||
14
samples/Swift/section-73.swift
Normal file
14
samples/Swift/section-73.swift
Normal file
@@ -0,0 +1,14 @@
|
||||
enum ServerResponse {
|
||||
case Result(String, String)
|
||||
case Error(String)
|
||||
}
|
||||
|
||||
let success = ServerResponse.Result("6:00 am", "8:09 pm")
|
||||
let failure = ServerResponse.Error("Out of cheese.")
|
||||
|
||||
switch success {
|
||||
case let .Result(sunrise, sunset):
|
||||
let serverResponse = "Sunrise is at \(sunrise) and sunset is at \(sunset)."
|
||||
case let .Error(error):
|
||||
let serverResponse = "Failure... \(error)"
|
||||
}
|
||||
4
samples/Swift/section-75.swift
Normal file
4
samples/Swift/section-75.swift
Normal file
@@ -0,0 +1,4 @@
|
||||
protocol ExampleProtocol {
|
||||
var simpleDescription: String { get }
|
||||
mutating func adjust()
|
||||
}
|
||||
20
samples/Swift/section-77.swift
Normal file
20
samples/Swift/section-77.swift
Normal file
@@ -0,0 +1,20 @@
|
||||
class SimpleClass: ExampleProtocol {
|
||||
var simpleDescription: String = "A very simple class."
|
||||
var anotherProperty: Int = 69105
|
||||
func adjust() {
|
||||
simpleDescription += " Now 100% adjusted."
|
||||
}
|
||||
}
|
||||
var a = SimpleClass()
|
||||
a.adjust()
|
||||
let aDescription = a.simpleDescription
|
||||
|
||||
struct SimpleStructure: ExampleProtocol {
|
||||
var simpleDescription: String = "A simple structure"
|
||||
mutating func adjust() {
|
||||
simpleDescription += " (adjusted)"
|
||||
}
|
||||
}
|
||||
var b = SimpleStructure()
|
||||
b.adjust()
|
||||
let bDescription = b.simpleDescription
|
||||
9
samples/Swift/section-79.swift
Normal file
9
samples/Swift/section-79.swift
Normal file
@@ -0,0 +1,9 @@
|
||||
extension Int: ExampleProtocol {
|
||||
var simpleDescription: String {
|
||||
return "The number \(self)"
|
||||
}
|
||||
mutating func adjust() {
|
||||
self += 42
|
||||
}
|
||||
}
|
||||
7.simpleDescription
|
||||
3
samples/Swift/section-81.swift
Normal file
3
samples/Swift/section-81.swift
Normal file
@@ -0,0 +1,3 @@
|
||||
let protocolValue: ExampleProtocol = a
|
||||
protocolValue.simpleDescription
|
||||
// protocolValue.anotherProperty // Uncomment to see the error
|
||||
8
samples/Swift/section-83.swift
Normal file
8
samples/Swift/section-83.swift
Normal file
@@ -0,0 +1,8 @@
|
||||
func repeat<ItemType>(item: ItemType, times: Int) -> ItemType[] {
|
||||
var result = ItemType[]()
|
||||
for i in 0..times {
|
||||
result += item
|
||||
}
|
||||
return result
|
||||
}
|
||||
repeat("knock", 4)
|
||||
7
samples/Swift/section-85.swift
Normal file
7
samples/Swift/section-85.swift
Normal file
@@ -0,0 +1,7 @@
|
||||
// Reimplement the Swift standard library's optional type
|
||||
enum OptionalValue<T> {
|
||||
case None
|
||||
case Some(T)
|
||||
}
|
||||
var possibleInteger: OptionalValue<Int> = .None
|
||||
possibleInteger = .Some(100)
|
||||
11
samples/Swift/section-87.swift
Normal file
11
samples/Swift/section-87.swift
Normal file
@@ -0,0 +1,11 @@
|
||||
func anyCommonElements <T, U where T: Sequence, U: Sequence, T.GeneratorType.Element: Equatable, T.GeneratorType.Element == U.GeneratorType.Element> (lhs: T, rhs: U) -> Bool {
|
||||
for lhsItem in lhs {
|
||||
for rhsItem in rhs {
|
||||
if lhsItem == rhsItem {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
anyCommonElements([1, 2, 3], [3])
|
||||
3
samples/Swift/section-9.swift
Normal file
3
samples/Swift/section-9.swift
Normal file
@@ -0,0 +1,3 @@
|
||||
let label = "The width is "
|
||||
let width = 94
|
||||
let widthLabel = label + String(width)
|
||||
Reference in New Issue
Block a user