Xcode:(用户定义的运行时属性)带负值的范围。选择?

Posted

技术标签:

【中文标题】Xcode:(用户定义的运行时属性)带负值的范围。选择?【英文标题】:Xcode:(user defined runtime attribute)Range with minus value. Alternative? 【发布时间】:2014-11-15 22:41:29 【问题描述】:

我创建了一个自定义 UITextField,其中包含一个额外的用户定义的运行时属性 validRange,我可以在情节提要视图中设置它。 我使用此属性检查 EndEditing 方法以验证新设置的文本。 我工作得很好,直到我必须从 -100,100 设置一个有效范围 由于 NSRange 使用 NSUInteger,因此不可能有负值。

实现这一目标的最佳方法是什么? 如果我使用 CGSize 而不是 NSRange 是否可以接受?

更新内容 Xcode 仅为用户定义的运行时属性提供以下数据类型选择:

这意味着我无法定义一个新结构来使用 NSInteger 创建一个 CustomRange。 由于 Point,Size 都是 NSInteger,NSInteger 数据类型,我考虑过使用它们。但这肯定是一种误用,所以我想知道是否有人知道更好的解决方案,例如误用 Point 或 Size 来使其工作。

作为另一种解决方法,我可以使用 String,我会手动将其拆分为自定义 UITextField 的方法,但是没有类型安全性。

【问题讨论】:

NSRange 或 CGSize 之间没有相关性,两者的用途不同。我想知道,你打算在这里实现什么目标? 使用NSInteger 定义您自己的struct。您可以根据需要设置为startlengthstartend @ldindu 我在我的问题中添加了一些信息,以便更好地了解我想要实现的目标。 @rmaddy 这是一个好主意,但我认为在这种情况下不实用,因为我需要从给定列表中进行选择(请参阅更新的问题) 【参考方案1】:

然后我建议您定义两个具有合适名称的 NSNumber 属性来表示 NSRange 值,而不是滥用 CGSize,因为使用 CGSize 会使其他读者/程序员感到困惑,因为我们有句话说,我们为别人而不是为自己编码。

还有一个NSNumber类方法如下

+ (NSNumber *)numberWithInteger:(NSInteger)value

它允许您按照您的意愿包装有符号整数值。

【讨论】:

我想这是最好的方法。我会喜欢用一个用户定义的运行时属性来实现它,但这似乎是不可能的。谢谢

以上是关于Xcode:(用户定义的运行时属性)带负值的范围。选择?的主要内容,如果未能解决你的问题,请参考以下文章

使用用户定义的运行时属性让应用程序崩溃

如何在代码之外使用 Xcode 4 和 iOS 4.3 将属性分配给自定义 UIControl?

UI动画高级篇

为啥我在尝试执行时间戳用户定义函数时遇到运行时错误(范围)

如何在运行时创建不带数据属性的剔除数据绑定

搜索时从 Xcode 中排除文件