Swift学习笔记-1
Apple官方開發手冊地址:
https://developer.apple.com/library/prerelease/ios/referencelibrary/GettingStarted/LandingPage/index.html
語法概覽
1 Simple Values
常量定義:let
變量定義:var
類型轉換,比方String():
打印常量/變量值使用 \() let apples = 3let oranges = 5let 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[]()let emptyDictionary = Dictionary<String, Float>()2 Control Flow
條件推斷 if / switch
循環控制 for-in for? while? do-while
let individualScores = [75, 43, 103, 87, 12]var teamScore = 0for score in individualScores {if score > 50 {teamScore += 3} else {teamScore += 1}}teamScoreswitch case
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-in
while/do-while var m = 2 do { m = m * 2 } while m < 100 m
for?
傳統格式: var secondForLoop = 0 for var i = 0; i < 3; ++i { secondForLoop += 1 } secondForLoop 新的格式: var firstForLoop = 0 for i in 0..3 { firstForLoop += i } firstForLoop3 Functions and Closures
函數名(參數1,參數2)->返回類型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 = 0for number in numbers {sum += number}return sum}sumOf()sumOf(42, 597, 12)函數嵌套: func returnFifteen() -> Int {var y = 10func 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)<pre name="code" class="objc"> class NamedShape {var numberOfSides: Int = 0var name: Stringinit(name: String) {self.name = name}func simpleDescription() -> String {return "A shape with \(numberOfSides) sides."}}
用還有一個函數作參數: 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 in 3 * number })
sort([1, 5, 3, 12, 2]) { $0 > $1 }
4 Objects and Classes
類實現.構造和析構函數 init/deinit
類的繼承和函數重載:
<pre name="code" class="objc">class EquilateralTriangle: NamedShape {var sideLength: Double = 0.0子類中初始化須要運行:1)設置子類屬性值2)父類初始化3)設置父類屬性值init(sideLength: Double, name: String) {self.sideLength = sideLengthsuper.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)."} }預設置 willSet和 didSet
willSet { square.sideLength = newValue.sideLength }
When working with optional values, you can write ? before operations like methods, properties, and subscripting. If the value before the ? is nil, everything after the ? is ignored and the value of the whole expression is nil. Otherwise, the optional value is unwrapped, and everything after the ? acts on the unwrapped value. In both cases, the value of the whole expression is an optional value. let optionalSquare: Square? = Square(sideLength: 2.5, name: "optional square")let sideLength = optionalSquare?.sideLength
5 Enumerations and Structures
enum的定義和使用
enum Rank: Int {case Ace = 1case Two, Three, Four, Five, Six, Seven, Eight, Nine, Tencase Jack, Queen, Kingfunc 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.Acelet aceRawValue = ace.toRaw()enum值和raw值的轉換(toRaw和fromRaw) if let convertedRank = Rank.fromRaw(3) {let threeDescription = convertedRank.simpleDescription()}struct 和class的差別:
struct使用的時候是拷貝。class使用的時候是引用。
6 Protocols and Extensions
聲明一個protocol
protocol ExampleProtocol {var simpleDescription: String { get }mutating func adjust()}協議使用:
class SimpleClass: ExampleProtocol {var simpleDescription: String = "A very simple class."var anotherProperty: Int = 69105func adjust() {simpleDescription += " Now 100% adjusted."}}var a = SimpleClass()a.adjust()let aDescription = a.simpleDescriptionstruct SimpleStructure: ExampleProtocol {var simpleDescription: String = "A simple structure"mutating func adjust() {simpleDescription += " (adjusted)"}}var b = SimpleStructure()b.adjust()let bDescription = b.simpleDescriptionNotice the use of the mutating keyword in the declaration of SimpleStructure to mark a method that modifies the structure.
Use extension to add functionality to an existing type
extension Int: ExampleProtocol {var simpleDescription: String {return "The number \(self)"}mutating func adjust() {self += 42}}simpleDescription7? Generics
參數類型待定:
func repeat<ItemType>(item: ItemType, times: Int) -> ItemType[] {var result = ItemType[]()for i in 0..times {result += item}return result}repeat("knock", 4)使用where帶參數列表: 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])轉載于:https://www.cnblogs.com/mfmdaoyou/p/7348719.html
總結
以上是生活随笔為你收集整理的Swift学习笔记-1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【中文题库】CISCO CCNP题库 6
- 下一篇: 用python制作田字格_2分钟学会在W