mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 09:40:21 +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:
|
extensions:
|
||||||
- .scd
|
- .scd
|
||||||
|
|
||||||
|
Swift:
|
||||||
|
type: programming
|
||||||
|
lexer: Text only
|
||||||
|
extensions:
|
||||||
|
- .swift
|
||||||
|
|
||||||
SystemVerilog:
|
SystemVerilog:
|
||||||
type: programming
|
type: programming
|
||||||
color: "#343761"
|
color: "#343761"
|
||||||
|
|||||||
@@ -581,6 +581,9 @@
|
|||||||
"SuperCollider": [
|
"SuperCollider": [
|
||||||
".scd"
|
".scd"
|
||||||
],
|
],
|
||||||
|
"Swift": [
|
||||||
|
".swift"
|
||||||
|
],
|
||||||
"SystemVerilog": [
|
"SystemVerilog": [
|
||||||
".sv",
|
".sv",
|
||||||
".svh",
|
".svh",
|
||||||
@@ -723,8 +726,8 @@
|
|||||||
".gemrc"
|
".gemrc"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"tokens_total": 611474,
|
"tokens_total": 612602,
|
||||||
"languages_total": 755,
|
"languages_total": 798,
|
||||||
"tokens": {
|
"tokens": {
|
||||||
"ABAP": {
|
"ABAP": {
|
||||||
"*/**": 1,
|
"*/**": 1,
|
||||||
@@ -61881,6 +61884,260 @@
|
|||||||
"wait": 1,
|
"wait": 1,
|
||||||
".fork": 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": {
|
"SystemVerilog": {
|
||||||
"module": 3,
|
"module": 3,
|
||||||
"endpoint_phy_wrapper": 2,
|
"endpoint_phy_wrapper": 2,
|
||||||
@@ -66478,6 +66735,7 @@
|
|||||||
"Stata": 3133,
|
"Stata": 3133,
|
||||||
"Stylus": 76,
|
"Stylus": 76,
|
||||||
"SuperCollider": 133,
|
"SuperCollider": 133,
|
||||||
|
"Swift": 1128,
|
||||||
"SystemVerilog": 541,
|
"SystemVerilog": 541,
|
||||||
"Tcl": 1133,
|
"Tcl": 1133,
|
||||||
"Tea": 3,
|
"Tea": 3,
|
||||||
@@ -66663,6 +66921,7 @@
|
|||||||
"Stata": 7,
|
"Stata": 7,
|
||||||
"Stylus": 1,
|
"Stylus": 1,
|
||||||
"SuperCollider": 1,
|
"SuperCollider": 1,
|
||||||
|
"Swift": 43,
|
||||||
"SystemVerilog": 4,
|
"SystemVerilog": 4,
|
||||||
"Tcl": 2,
|
"Tcl": 2,
|
||||||
"Tea": 1,
|
"Tea": 1,
|
||||||
@@ -66686,5 +66945,5 @@
|
|||||||
"YAML": 2,
|
"YAML": 2,
|
||||||
"Zephir": 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