-1

我在从 Objective C 转换到 Swift 2.2 时遇到了问题。有人可以帮助我吗??

这是Objective C中的代码

变量声明为

@property (nonatomic, assign) NSInteger currentViewControllerIndex;
@property (nonatomic, getter = isWrapEnabled) BOOL wrapEnabled;

Objective C中的变量设置函数是

- (void)setWrapEnabled:(BOOL)sWrapEnabled {

    wrapEnabled = sWrapEnabled;
    [self.view layoutIfNeeded];
}

- (void)setCurrentViewControllerIndex:(NSInteger)curViewControllerIndex {

    [self scrollToViewControllerAtIndex:curViewControllerIndex animated:NO];
}

这就是我用 Swift 编写的方式

var tmpWrapEnabled : Bool = Bool()
internal(set) var wrapEnabled : Bool? {

    get {

        return tmpWrapEnabled
    }

    set(newValue) {

        if newValue == true {

            tmpWrapEnabled = newValue!
            self.view.layoutIfNeeded()
        }
    }
}

var tmpCurrentViewControllerIndex : NSInteger = 0
internal(set) var currentViewControllerIndex : NSInteger? {

    get {
        return tmpCurrentViewControllerIndex
    }

    set(newValue) {
        tmpCurrentViewControllerIndex = newValue!
    }
}
4

1 回答 1

2

基本上你只需要didSet观察者,其余的变量就像一个正常的变量。

var wrapEnabled : Bool {
   didSet {
      if wrapEnabled  {
        self.view.layoutIfNeeded()
      }
   }
}

var currentViewControllerIndex : Int {
   didSet {
    scrollToViewControllerAtIndex(currentViewControllerIndex, animated:false)
   }
}

考虑到将初始值分配给变量时不会调用观察者。

于 2016-04-20T11:46:39.733 回答