【发布时间】:2014-08-10 04:43:15
【问题描述】:
我将从我正在尝试做的事情开始:我想创建一个漂亮的小 mixin,UIViews 可以利用它来抽象出预期的触摸事件(即,“以用户现在拖动的方式,做他们真的很想完成这个动作”)。
我认为最好的方法是使用一个类别,但我发现它们已被 swift 中的“扩展”取代。大多。显然,现在所有属性都已计算。
为了使这个 mixin 工作,我需要一个本地存储属性来存储令牌“意图缓冲区”。但是,任何向扩展添加 var 的尝试都会出现关于我需要如何提供 setter 和 getter 的错误。出于同样的原因,协议将不起作用。如果我在扩展程序旁边创建一个协议,我仍然必须有一个本地 ivar 来存储这个新属性。
所以两个问题之一:
我是否会走很长的路?如果是,我应该怎么做?
或
我该如何做一些事情,我可以创建一个类似“mixin”的结构,允许我定义应该混入的简单属性和方法?
【问题讨论】:
-
混合不是 Cocoa 使用的模式。您能否为您尝试做的事情提供更具体的用例。比“用户现在拖动的方式,他们真的要完成这个动作”更具体。
-
假设我正在向下拖动拇指以拉入新视图。如果拖动只是 3px,也许我想取消拉入新视图。但是如果拖动是 10px 并且向下,我想引入新视图。相反,如果他们拖了 20px,然后又开始往上推,我可以推断他们可能根本不打算拉入视图,然后最终取消引入新视图。这似乎是 iOS 中很常见的白话,我想维护它。我可以想到许多在单一上下文之外这可能有用的实例。
-
@Kreiri 我不这么认为;这并没有解决我的问题。虽然也许我遗漏了一些东西,所以如果你能向我解释它们是如何相关的。
-
“显然属性现在都是计算的” - 您也不能将属性/变量添加到 Objective C 类别中的类。您可以通过使用 objc 运行时函数设置/获取类别中的关联对象来绕过它。
标签: ios architecture swift