2016-04-27 46 views
-2

由于我的referred here,在swift中没有@property或@synthesise指令。swift @property指令:自定义访问器

然后,

1]如何setter和getter将由编译器可以添加?

2]如果我有一个对象,如何编写我们自己的setter和getter方法?

我是的新手吗?有人可以用例子来解释吗?

//编辑:

反对投票之前,请让我带作为Apple documentation.

@property (getter=isFinished) BOOL finished;将覆盖getter方法。

以同样的方式,我怎么能在Swift中实现?

对于下面的例子,如何使吸气剂isFinished

class CarPaint : NSObject { 

    var finished:Bool = Bool(); 

    func getCarDoorColor() -> UIColor { 

     if finished { //instead here I want to `isFinished` 
      return UIColor.whiteColor() 
     } 

     return UIColor.brownColor() 

    } 

} 
+1

你有没有看过Swift文档?例如:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html – ozgur

+0

@ozgur是的,我再读一遍!但所有的例子(Rect,Point)都是基于结构。我无法找到实现getter和setter的自定义方法/函数。 – jax

回答

0

回答第二部分你的问题,直到现在还没有在Swift中命名的getter。

@property (getter=isFinished) BOOL finished; 

苹果建议在斯威夫特上述Objective-C的等效代码在他们migration documentation

var _finished:Bool = false // finished boolean variable. 

var finished:Bool { //Getter(custom) and Setter for finished variable. 

    @objc(isFinished) get { 
     return self._finished 
    } 
    set(newValue){ 
     _finished = newValue 
    } 
} 

只有这样,才能使周围的getter self.isFinished()

func isFinished() -> Bool { 
    return _finished; 
} 

的工作,我希望你有解决方案。

+0

感谢您的回答。哪一个被优先考虑? – jax

3

您可以更改属性是如何在斯威夫特访问是这样的:

private var _someInt: Int = 0 
var someInt: Int { 
    get { 
     return _someInt 
    } 
    set(newValue) { 
     _someInt = newValue 
    } 
} 

在这个例子中,我们使用私有变量来存储我们的值,并使用get/set闭包来访问该变量。因为这不是很有用,但在其他情况下它可能很有用,例如,如果您想访问另一个对象的变量,就好像它是该属性一样。

相关问题