我正在尝试实现这个objective-c代码
@property (strong) UIView *customView;
-(UIView*)customView
{
if (!customView){
self.customView = [[UIView alloc]init];
self.customView.backgroundColor = [UIColor blueColor];
}
return customView;
}
为什么我要使用这个?CustView从很多地方调用,所以我们必须在所有地方检查这个条件。为了避免这种重复,我写了这个。
所以我尝试创建存储的属性,并使用getter方法检查是否已经创建。
var mainView : UIView? {
get{
if let customView = self.mainView{
return self.mainView
}
var customView : UIView = UIView()
self.mainView = customView
self.mainView.backgroundColor = UIColor(blueColor)
return customView
}
set{
self.mainView = newValue
}
}
这是正确的吗?或者其他方法来做这件事?
注意:上面的代码没有警告或错误。但是与存储和计算的属性混淆。请让我明白。
swift 2.1中的等效值应为:
var _customView:UIView? = nil
var customView:UIView {
if _customView == nil
{
_customView = UIView.init()
_customView?.backgroundColor = UIColor.blueColor()
}
return _customView!
}
此外,为了避免多次调用customView
的getter,我将按以下方式编写您的原始objective-C代码:
@property (strong) UIView *customView;
// @synthesize customView; // make sure you didn't add this line
- (UIView*)customView
{
if (!_customView){
_customView = [[UIView alloc] init];
_customView.backgroundColor = [UIColor blueColor];
}
return customView;
}
这就是所谓的懒惰属性。就像其他存储属性一样声明它,但是使用< code>@lazy修饰符。当有人第一次试图得到这个对象时,它就会被创建。你不需要为自己写那些东西。
请参阅Swift Book中的“懒惰存储属性”。你只需写道:
@lazy var customView = UIView()
不知道为什么,但惰性变量与计算属性相结合会导致错误:
'lazy' attribute may not be used on a computed property
但这似乎有效:
class MyClass {
@lazy var customView: NSView = {
let view = NSView()
// customize view
return view
}()
}
问题内容: 我注意到编译器不会让我用另一个存储的值覆盖存储的属性(这似乎很奇怪): 但是,我可以使用计算属性来执行此操作: 为什么不允许我再给它一个值? 为什么用存储的属性覆盖是可憎的,而要使用计算的一个犹太洁食呢?他们在想什么呢? 问题答案: 为什么不允许我再给它另一个值? 绝对可以为继承的属性赋予不同的值。如果您在采用该初始值的构造函数中初始化属性,然后传递与派生类不同的值,则可以执行此操作:
问题内容: 我是Swift的新手,只是在文档中遇到了这一点: 计算的属性由类,结构和枚举提供。存储的属性仅由类和结构提供。 这是为什么?枚举的关联值是否像存储属性一样工作?似乎他们最初存储了属性- 问题答案: 确实具有存储的 类型 属性-即属性。他们没有存储的 实例 属性。我不知道是否存在技术上的原因为什么存储的实例属性不可用于。如果您想要“为什么”的技术答案,则可能需要在开发论坛上提问。 在您的
本文向大家介绍Vue计算属性的使用,包括了Vue计算属性的使用的使用技巧和注意事项,需要的朋友参考一下 我们都知道在Vue构造函数的参数对象中有一个【data】属性,该属性值是一个对象,该对象是对数据的代理,是一个键值对并且时刻与页面表现是一致的,但是这里面只能是简单的键值对,不能拥有业务逻辑,并且由于【data】中的属性属于同一个生命周期,所以如果我们需要某一个属性是依赖于另外一个属性时,在【d
问题内容: 文本框或文本区域的属性的正确值是多少? 我以前看过以下内容: 问题答案: 对于XHTML,是有效的标记。 对于HTML5,W3C对其样本有效并使用了它们。 实际上,两种方法都可以在所有主要浏览器上使用。
主要内容:实例 1,实例 2,computed vs methods,实例 3,computed setter,实例 4计算属性关键词: computed。 计算属性在处理一些复杂逻辑时是很有用的。 可以看下以下反转字符串的例子: 实例 1 <div id="app"> {{ message.split('').reverse().join('') }} </div> 实例 1 中模板变的很复杂起来,也不容易看懂理解。 接下来我们看看使用了计算属性的实例: 实例 2 <div id="app">
主要内容:实例 1,实例 2,computed vs methods,实例 3,computed setter,实例 4计算属性关键词: computed。 计算属性在处理一些复杂逻辑时是很有用的。 可以看下以下反转字符串的例子: 实例 1 <div id="app"> {{ message.split('').reverse().join('') }} </div> 实例 1 中模板变的很复杂起来,也不容易看懂理解。 接下来我们看看使用了计算属性的实例: 实例 2 <!DOCTYPE html