2014-06-19 69 views
3

我將從我想要做的事情開始:我想創建一個很好的小混音,UIViews可以利用它來抽象出預期的觸摸事件(也就是說,用戶現在正在拖動,他們是否真的想完成這個動作「)。Swift:「Mixing in」屬性

我認爲最好的辦法是使用一個類別,但是我發現它們已經被swift中的「擴展名」所取代。大多。顯然現在所有的屬性都被計算出來了。

爲了使這個mixin有效,我需要一個本地存儲的屬性來存儲一個令牌「意向緩衝區」。但是,向擴展添加var的任何嘗試都會出現錯誤,說明我需要如何提供setter和getter。協議不會出於同樣的原因。如果我在擴展名旁邊創建一個協議,我仍然需要一個本地ivar來存儲這個新的屬性。

所以兩個問題提出一個:

我該怎麼解決這個問題的很長的路要走,如果是這樣,我應該怎麼做呢?

我怎樣做的東西,我可以創造一個「混入」狀結構,讓我來定義簡單的屬性和方法應在混合使用嗎?

+0

混入不進行使用的可可的模式。你能給出一個更具體的用例來說明你正在做什麼。比「用戶現在正在拖動的方式更具體」,他們是否真的想要完成此操作? –

+0

假設我正在向下拖動我的拇指以拉入新視圖。如果拖動僅僅是3px,也許我想取消拉動新視圖。但是,如果阻力是10px,並且向下,我想引入新視圖。相反,如果他們拖動20px,但然後開始推回來,我可以推斷他們可能不打算拉入視線,並最終取消引入新視圖。它在iOS中似乎是一個非常普通的白話,我想保持它。我可以想到許多情況下,這可能在單個環境之外有用。 – dclowd9901

+0

[有沒有辦法在Swift中設置關聯對象?](http://stackoverflow.com/questions/24133058/is-there-a-way-to-set-associated-objects-in-swift) – Kreiri

回答

0

Mixins不是一種與Cocoa一起使用的模式,無論是使用Swift還是Objective-C。正如您發現的那樣,類別不能添加額外的ivars,而協議只定義一個接口,因此也不需要ivars。

可可一般偏愛對象使用(或封裝)來繼承。繼承沒有被使用,但它只是單一的繼承,所以mixins是不可能的。而且他們從不需要。

對於所描述的用例,正確的方法是通過手勢識別器。信息和代碼可以在這裏找到:

https://developer.apple.com/library/ios/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/GestureRecognizer_basics/GestureRecognizer_basics.html#//apple_ref/doc/uid/TP40009541-CH2-SW2

+0

這看起來像是我的第一個問題的答案,我會看看API;謝謝。 – dclowd9901

+0

我已經在你的mixins問題上添加了更多信息。 –