Agg*_*sor 31 getter getter-setter ios swift
当我创建这样的setter时:
var masterFrame:CGRect{
set{
_imageView.frame = newValue
_scrollView.frame = newValue
}
}
Run Code Online (Sandbox Code Playgroud)
它迫使我做一个我不想做的吸气剂.
有没有办法在没有getter的情况下在Swift中创建一个setter?
Eon*_*nil 15
好吧,如果我真的需要,我会用这个.
public subscript(index: Int) -> T {
@available(*, unavailable)
get {
fatalError("You cannot read from this object.")
}
set(v) {
}
}
Run Code Online (Sandbox Code Playgroud)
这在运行时进行检查,但显然会将您的意图传达给代码用户.
如果Swift编译器支持getter上的某些属性,那将是很好的.
public subscript(index: Int) -> T {
@available(*, unavailable)
get {
fatalError("You cannot read from this object.")
}
set(v) {
}
}
Run Code Online (Sandbox Code Playgroud)
但目前这不起作用:P(Swift 1.2,版本6.3.1(6D1002))
最快,最简单的方法就是在Apple Radar和Apple Developer Forum上提出这个问题.
请改用didSet:
var masterFrame:CGRect {
didSet {
_imageView.frame = masterFrame
_scrollView.frame = masterFrame
}
}
Run Code Online (Sandbox Code Playgroud)
要拥有"仅限setter属性",您可以只使用一个设置值的简单函数; 例如,如果我们有一个名为的私有属性value
,我们可以调用一个setter方法configureWithValue(value:String)
来更新属性但不允许外部访问该属性:
private var value:String
func configureWithValue(value:String) {
self.value = value
}
Run Code Online (Sandbox Code Playgroud)
仅设置属性听起来不是很有意义.您可能应该使用一种方法.
或者,只需让编译器开心并添加一个你从不调用的getter:
get {
return _imageView.frame
}
Run Code Online (Sandbox Code Playgroud)
当然.你可以返回一个nil并使类型可选:
var color: MyColorEnum? {
get { return nil }
set {
switch newValue! {
case .Blue:
view.backgroundColor = UIColor.blueColor()
case .Red:
view.backgroundColor = UIColor.redColor()
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用didSet
以避免所有问题:
var color: MyColorEnum! {
didSet {
switch color {
case .Blue:
view.backgroundColor = UIColor.blueColor()
case .Red:
view.backgroundColor = UIColor.redColor()
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15843 次 |
最近记录: |