作者marki (marki)
看板MacDev
標題[問題] 一個語法請教
時間Wed Nov 2 14:47:54 2016
最近在看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就不行了誒
不好意思 我知道這個可能是很基本的問題 可是真的看不懂
拜託大家了
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 175.98.177.62
※ 文章網址: https://www.ptt.cc/bbs/MacDev/M.1478069276.A.B8E.html
→ darktt: 他不是繼承,而是定義變數型態 11/02 18:54
→ darktt: 另外struct是不能繼承的 11/02 18:54
→ tkdmaf: 宣告的類別或結構也算是一種型態。 11/02 21:54
→ tkdmaf: 意思上就是你傳入的東西就必須是這個class或是struct實體 11/02 21:55
推 ckvir: 改成class應該也可以吧 11/03 12:36
推 itisjoe: 定義方法可以名字一樣 但參數不同 (函式也是一樣) 11/04 00:15
→ itisjoe: 所以 init() 跟 init(origin:size:) 是兩個個別獨立的 11/04 00:16
→ itisjoe: 方法(或是建構器 initializer ) 11/04 00:17
→ itisjoe: 不知道這是不是你的疑問 11/04 00:19
→ itisjoe: 我好像弄錯了 問題的解答就是前面幾位推文講的那樣沒錯 11/04 00:26