Swift
语言 2014年6月3日发布,替代OBJECT-C Swift
is a
new programming
language for creating
iOS and OS X apps. Swift builds on the
best of C and Objective-C, without the constraints of C compatibility. Swift adopts safe programming patterns and adds modern features to make programming easier, more flexible, and more fun. Swift’s clean slate, backed
by the
mature and much-loved Cocoa and Cocoa Touch frameworks, is an
opportunity to reimagine how software development works.文档 https://itunes.apple.com/us/book/the-swift-programming-language/id881256329?mt=11 http://download.youkuaiyun.com/detail/surfsky/7440835helloWorld println("Hello,
world")-------------------------------------------------------------基础-------------------------------------------------------------注释 // /**/分号 单行无需加分号 多个语句放在一行,需要加分号变量 var myVariable
= 42常量 let myConstant
= 42 let explicitDouble:
Double = 70-------------------------------------------------------------数据类型-------------------------------------------------------------数字类型 类型 Int:
Int32, Int64 UInt:
UInt32, Uint64 Double Float 各种表示方法 let decimalInteger
= 17 let binaryInteger
= 0b10001 //
17 in binary notation let octalInteger
= 0o21 //
17 in octal notation let hexadecimalInteger
= 0x11 //
17 in hexadecimal notation let decimalDouble
= 12.1875 let exponentDouble
= 1.21875e1 let hexadecimalDouble
= 0xC.3p0 let paddedDouble
= 000123.456 let oneMillion
= 1_000_000布尔(boolean) let orangesAreOrange
= true let turnipsAreDelicious
= false向量 let (statusCode,
statusMessage) = (404, "Not
Found") let (x,
y) = (1, 2) let http200Status
= (statusCode: 200, description: "OK") println("The
status code is \(http200Status.statusCode)")字符串 let label
= "The
width is " let width
= 94 let widthLabel
= label + String(width) 字符串相加 let apples
= 3 let oranges
= 5 let appleSummary
= "I
have \(apples) apples." let fruitSummary
= "I
have \(apples + oranges) pieces of fruit."数组 var shoppingList
= ["catfish",
"water",
"tulips",
"blue
paint"] shoppingList[1]
= "bottle
of water" var occupations
= ["Malcolm":
"Captain",
"Kaylee":
"Mechanic",] occupations["Jayne"]
= "Public
Relations" let emptyArray
= String[]() shoppingList
= []字典 let emptyDictionary
= Dictionary<String, Float>() emptyDictionary
= [:]空(nil)和可为空对象 var serverResponseCode:
Int? = 404 serverResponseCode
= nil ----------------------------------------------
let possibleString:
String? = "An
optional string." println(possibleString!) let assumedString:
String! = "An
implicitly unwrapped optional string." println(assumedString) -------------------------------------------------------------数据流-------------------------------------------------------------if if i
== 1 { //
this example will compile successfully }switch 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." }for var firstForLoop
= 0 for var i
= 0; i < 3; ++i { firstForLoop
+= 1 } for i
in 0..3
{ firstForLoop
+= i }for(遍历数组) let individualScores
= [75, 43, 103, 87, 12] var teamScore
= 0 for score
in individualScores
{ if score
> 50 { teamScore
+= 3 }
else { teamScore
+= 1 } } for(遍历字典) 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 } } }while var n
= 2 while n
< 100 { n
= n * 2 }do...while var m
= 2 do { m
= m * 2 }
while m
< 100 断言(assert) let age
= -3 assert(age
>= 0, "A
person's age cannot be less than zero") -------------------------------------------------------------函数-------------------------------------------------------------函数定义和调用 func
greet(name: String, day: String) -> String { return "Hello
\(name), today is \(day)." } greet("Bob",
"Tuesday")返回多个数据 func
getGasPrices() -> (Double, Double, Double) { return (3.59,
3.69, 3.79) } getGasPrices()不限个数参数 func
sumOf(numbers: Int...) -> Int { var sum
= 0 for number
in numbers
{ sum
+= number } return sum } sumOf() sumOf(42,
597, 12)嵌套函数 func
returnFifteen() -> Int { var y
= 10 func
add() { y
+= 5 } add() return y } returnFifteen()返回函数变量 func
makeIncrementer() -> (Int -> Int) { func
addOne(number: Int) -> Int { return 1
+ number } return addOne } var increment
= makeIncrementer() increment(7)函数作为输入参数(类似lambda表达式) 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)闭包 numbers.map({ (number:
Int) -> Int in let result
= 3 * number return result })用编号替代名字 sort([1,
5, 3, 12, 2]) { $0 > $1 }-------------------------------------------------------------对象和类-------------------------------------------------------------类定义 class Shape
{ var numberOfSides:
Int = 0 var name:
String init(name:
String) { self.name
= name } func
simpleDescription() -> String { return "A
shape with \(numberOfSides) sides." } }使用 var shape
= Shape() shape.numberOfSides
= 7 var shapeDescription
= shape.simpleDescription()self/super self
-> this super
-> parent 继承 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()属性 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)." }willSet和didSet(属性的值设置前后处理) var triangle:
EquilateralTriangle { willSet
{ square.sideLength
= newValue.sideLength } }可为空对象方法调用 let optionalSquare:
Square? = Square(sideLength: 2.5, name: "optional
square") let sideLength
= optionalSquare?.sideLength泛型 |
struct Pair<T: Equatable> { let a: T! let b: T! init(a: T, b: T) { self.a = a self.b = b } func equal() -> Bool { return a == b } } let pair = Pair(a: 5, b: 10) pair.a // 5 pair.b // 10 pair.equal() // false let floatPair = Pair(a: 3.14159, b: 2.0) floatPair.a // 3.14159 floatPair.b // 2.0 floatPair.equal() // false
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
-------------------------------------------------------------枚举和结构体-------------------------------------------------------------枚举 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() if let convertedRank
= Rank.fromRaw(3) { let threeDescription
= convertedRank.simpleDescription() }看得有点晕 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): }结构体 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() |

115

被折叠的 条评论
为什么被折叠?



