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.47.0