[問題] 一個語法請教

作者: marki (marki)   2016-11-02 14:47:54
最近在看Swift 起步走
想請問一個範例
http://goo.gl/hfbTn1
這個網站中的 值型別的建構器委任 章節的範例
========================================================================
// 定義兩個示範需要用到的結構
struct Size {
var width = 0.0, height = 0.0
}
struct Point {
var x = 0.0, y = 0.0
}
// 定義一個方形的結構 Rect
struct Rect {
// 使用上面兩個定義的結構來儲存這個方形的原點及尺寸
var origin = Point()
var size = Size()
// 三個建構器
init() {}
init(origin: Point, size: Size) {
self.origin = origin
self.size = size
}
init(center: Point, size: Size) {
let originX = center.x - (size.width / 2)
let originY = center.y - (size.height / 2)
self.init(
origin: Point(x: originX, y: originY), size: size)
}
}
=========================================================================
第二個建構器
init(origin: Point, size: Size){
......
}
我可以理解 例如 init(origin: Int, size: Int) 這樣的意思
我想請問這個建構器寫origin: Point 好像也不是繼承 這個是什麼意思啊?
另外 我發現我把struct 改成 class就不行了誒
不好意思 我知道這個可能是很基本的問題 可是真的看不懂
拜託大家了
謝謝
作者: darktt (小朱)   2016-11-02 18:54:00
他不是繼承,而是定義變數型態另外struct是不能繼承的
作者: tkdmaf (皮皮快跑)   2016-11-02 21:54:00
宣告的類別或結構也算是一種型態。意思上就是你傳入的東西就必須是這個class或是struct實體
作者: ckvir (ckvir)   2016-11-03 12:36:00
改成class應該也可以吧
作者: itisjoe ( _(:3」∠)_)   2016-11-04 00:15:00
定義方法可以名字一樣 但參數不同 (函式也是一樣)所以 init() 跟 init(origin:size:) 是兩個個別獨立的方法(或是建構器 initializer )不知道這是不是你的疑問我好像弄錯了 問題的解答就是前面幾位推文講的那樣沒錯

Links booklink

Contact Us: admin [ a t ] ucptt.com