From d21b77af5cbb21ffcb908efb787f88b300e52d8f Mon Sep 17 00:00:00 2001 From: AceVest Date: Wed, 22 Jun 2016 23:42:37 +0800 Subject: [PATCH] Classes & Properties --- .../Classes.xcplaygroundpage/Contents.swift | 61 ++++++++++++++ .../Contents.swift | 78 ++++++++++++++++++ .../AcePlay.playground/contents.xcplayground | 2 + .../UserInterfaceState.xcuserstate | Bin 14660 -> 15713 bytes 4 files changed, 141 insertions(+) create mode 100644 learn/AcePlay/AcePlay.playground/Pages/Classes.xcplaygroundpage/Contents.swift create mode 100644 learn/AcePlay/AcePlay.playground/Pages/Properties.xcplaygroundpage/Contents.swift diff --git a/learn/AcePlay/AcePlay.playground/Pages/Classes.xcplaygroundpage/Contents.swift b/learn/AcePlay/AcePlay.playground/Pages/Classes.xcplaygroundpage/Contents.swift new file mode 100644 index 0000000..7a81ad8 --- /dev/null +++ b/learn/AcePlay/AcePlay.playground/Pages/Classes.xcplaygroundpage/Contents.swift @@ -0,0 +1,61 @@ +//: [Previous](@previous) + +import UIKit + +printLine("Classes & Structures") + +struct ResolutionA { + var width = 0 + var height: Int +} + +// 如果成员未初始化,在实例化的时候要初始化所有成员 +var resolutionA = ResolutionA(width: 2, height: 3) + + +struct Resolution { + var width = 0 + var height = 0 +} +var resolutionB = Resolution() // 成员初始化完了则不用 + +let vga = Resolution(width: 640, height: 480) +let hd = Resolution(width: 1920, height: 1080) +var cinema = hd +cinema.width = 2048 + +// Struct 是值类型 +print("HD: \(hd.width)x\(hd.height)") +print("Cinema: \(cinema.width)x\(cinema.height)") + + +class VideoMode { + var resolution = Resolution() + var interlaced = false + var frameRate = 0.0 + var name: String? +} + +let someVideoMode = VideoMode() +someVideoMode.resolution.width = 1680 // Class是引用类型,所以纵然someVideoMode是常量,但其指向的是变量 +someVideoMode.resolution.height = 1050 // 属性访问是可以级联进行的 + +let tenEighty = VideoMode() +tenEighty.resolution = hd +tenEighty.interlaced = true +tenEighty.frameRate = 25.0 +tenEighty.name = "1080i" + +let anotherTenEighty = tenEighty // 引用赋值 +anotherTenEighty.frameRate = 30.0 +print("Now TenEight Frame Rate: \(tenEighty.frameRate)") + + +printLine("Identity Operators") +if anotherTenEighty === tenEighty { + print("tenEighty & anotherTenEighty refer to the same VideoMode instance") +} + +if someVideoMode !== tenEighty { + print("someVideoMode & tenEighty refer to different VideoMode instance") +} \ No newline at end of file diff --git a/learn/AcePlay/AcePlay.playground/Pages/Properties.xcplaygroundpage/Contents.swift b/learn/AcePlay/AcePlay.playground/Pages/Properties.xcplaygroundpage/Contents.swift new file mode 100644 index 0000000..e636094 --- /dev/null +++ b/learn/AcePlay/AcePlay.playground/Pages/Properties.xcplaygroundpage/Contents.swift @@ -0,0 +1,78 @@ +//: [Previous](@previous) + +import UIKit + +printLine("Properies") + +printLine("Stored Properties") + +//Instances of FixedLengthRange have a variable stored property called firstValue and a constant stored property called length. +struct FixedLengthRange { + var firstValue: Int + let length: Int +} + +var rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3) +rangeOfThreeItems.firstValue = 7 + + +printLine("Stored Properties of Constant Structure Instances") + +let rangeOfFourItems = FixedLengthRange(firstValue: 0, length: 4) +//以下这句是不行的,因为rangeOfFourItems是常量FixedLengthRange的struct类型,是值类型,其值不能修改。而类因为是引用类型则可以。 +//rangeOfFourItems.firstValue = 9 + +printLine("Lazy Stored Properties") +// lazy property must always be variable +// lazy 属性在声明前加上 lazy 关键字 +// 如果一个被标记为 lazy 的属性在没有初始化时就同时被多个线程访问,则无法保证该属性只会被初始化一次 + + +printLine("Computed Properties") + +struct Point { + var x = 0.0, y = 0.0 +} + +struct Size { + var width = 0.0 + var height = 0.0 +} + +struct Rect { + var origin = Point() + var size = Size() + + var center: Point { + get { + var p = Point() + p.x = origin.x + size.width/2 + p.y = origin.y + size.width/2 + return p + } + + set(p) { + origin.x = p.x - size.width/2 + origin.y = p.y - size.height/2 + } + + /* + //set 有更简洁的写法,set重命名参数的话默认参数名为newValue + + set { + origin.x = newValue.x - size.width/2 + origin.y = newValue.y - size.height/2 + } + */ + } +} + + + +var square = Rect(origin: Point(x:0.0, y:0.0), size: Size(width: 10.0, height: 10.0)) +let squareCenter = square.center +print("square center is (\(squareCenter.x), \(squareCenter.y))") + +square.center = Point(x: 15.0, y: 15.0) +print("square new origin is (\(square.origin.x), \(square.origin.y))") + diff --git a/learn/AcePlay/AcePlay.playground/contents.xcplayground b/learn/AcePlay/AcePlay.playground/contents.xcplayground index 04644e5..d6d3e1a 100644 --- a/learn/AcePlay/AcePlay.playground/contents.xcplayground +++ b/learn/AcePlay/AcePlay.playground/contents.xcplayground @@ -5,5 +5,7 @@ + + \ No newline at end of file diff --git a/learn/AcePlay/AcePlay.playground/playground.xcworkspace/xcuserdata/Ace.xcuserdatad/UserInterfaceState.xcuserstate b/learn/AcePlay/AcePlay.playground/playground.xcworkspace/xcuserdata/Ace.xcuserdatad/UserInterfaceState.xcuserstate index f12efa0bb7e9602b4f04d60e044dfebad40714b7..1e2cf8b5d704e250a1767a62b314a19b37e33180 100644 GIT binary patch literal 15713 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 literal 14660 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 -- 2.44.0