iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 5
0
自我挑戰組

白鬍子老頭30天 Swift Ios系列 第 5

Day5 lecture 3 Swift and Foundation Framework -2

Class,Struct,Enum 同與不同

相似之處:

  1. 宣告的語法
  2. Properties function
  3. Initializers(enum 沒有)

不同之處:

  1. Inheritance(只有 class)
  2. value type(struct,enum) vs reference type(class)

Value type vs Reference type

Value

傳值

//如果y是value type
var x = y 
//x 會等於y的copy

Reference

傳址
存在heap裡並且自動引用計數(ARC)
ARC會在類別的實例不再被使用時,自動釋放其占用的內存。

NSObject

NSObject是ObjectiveC語言中的基類,所有的OC類都繼承自NSObject

NSDate

不管項目和「日期」有何關係,開發人員都需要和 NSDate 對象打交道。
不需要 .today 或 .now 直接初始化一個 Date 即可

let date = Date()

再來使用 NSDateFormatter 轉換日期和字符

let formatter = DateFormatter()

dateFormatter 對象默認會使用系統中設置的區域信息,除非顯式地設置區域。即便如此,手動設置區域也不是必須的原文網址:https://read01.com/3G2AG.html
在PlayGround試的結果如下
http://ithelp.ithome.com.tw/upload/images/20161220/20103833qb5xOZ9BYz.png

NSData

大概查了一下
NSData(NSMutableData)是二進位數據對象——蘋果將二進位數據封裝成對象,讓我們可以用面向對象的思維去操作這些數據。
我們可以通過原始的二進位數據(Raw Bytes)去生成NSData對象,也可以通過NSData存取/訪問(Accessing)這些二進位數據。
原文網址:https://read01.com/64A2kM.html

Initiazation

在哪裡可以得到免費的 init

如果你的屬性在類別裡都有預設值,那你就可以使用init()
如果你的Struct沒有Initializers 那你也會得到一個含有所有屬性的init方法

struct A{
var apple : string
var book :bool
}
//so u get this
let aaa = A(apple: "japen", book: 2)

你可以在init裡做什麼

1.你可以在裡面設置所有的屬性值甚至你的屬性有預設值
2.你可以在裡面設置你的常數屬性 (let)
3.你可以呼叫其他init方法 在你的init方法裡

你在init一定得做的

1.你的init全部跑完 你的屬性propertie都必須要給值
2.有兩種init
(1)Designated initializers
最常用也是最主要的init(),在很多OOP 語言中都是使用它將初始值賦值,在Swift 中,子類別(Sub Class)只有designated initializers可以呼叫super 對父類別(Parent Class)進行動作,每個子類別都至少要有一個designated initializers
http://ithelp.ithome.com.tw/upload/images/20161220/20103833PVjjc7G1lQ.png
(2)Convenience initializers
次要的initializer ,可有可無都可以,可以一次串接好幾個convenience initializers ,只是不管如何最後一定要呼叫designated initializer,宣告時,要在func 前面加convenience
http://ithelp.ithome.com.tw/upload/images/20161220/20103833kI7N6FEfxm.png
3條規則
唯有designated initializer 能夠呼叫父類別的designated initializer
在一個類別裡convenience initializer 必定會呼叫另一個initializer (可能是另一個convenience 或designated)
不管叫了幾個convenience initializer 最終一定要有呼叫designated initializer 到父類別。

init 的繼承

1.如果你沒有設置任何designated initializer 那你將會繼承所有你父類別的designated initializer
2.如果你override所有你父類別的designated initializer 那你將會繼承所有他的 convenience initialzer
3.如果你都沒有設置init 那你將會繼承父類別所有的init mathod
你繼承的init 必須滿足上述的規則

可以失敗的init

加個?使init變optinal
http://ithelp.ithome.com.tw/upload/images/20161220/201038333OkskvGAoy.png

AnyObject

AnyObject在Swift中可以指代任何class的對象它本質上是一個空協議


上一篇
Day4 lecture 3 Swift and Foundation Framework -1
下一篇
Day6 lecture 4 Views -1
系列文
白鬍子老頭30天 Swift Ios30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言