从另一个文件访问变量

时间:2017-12-29 20:20:06

标签: swift file

我有两个文件。其中有一个课程内容:

class RelativeStrength: NSObject {

    func calculateRSI() {
        let relativeStrength1 = 87652
        let relativeStrength2 = 5634

        let rSI1 = 100 - (100 / (relativeStrength1 + 456))
        let rSI2 = 100 - (100 / (relativeStrength2 + 12))

        let average = (rSI1 + rSI2) / 2      
    }
}

另一个我想访问average以在其他计算中使用它的地方。那可能吗?

3 个答案:

答案 0 :(得分:0)

您可以average成为RelativeStrength类中的静态变量。

class RelativeStrength: NSObject {
    static var average: Double = 0

    func calculateRSI() {
        let relativeStrength1 = 87652
        let relativeStrength2 = 5634

        let rSI1 = 100 - (100 / (relativeStrength1 + 456))
        let rSI2 = 100 - (100 / (relativeStrength2 + 12))

        average = (rSI1 + rSI2) / 2      
    }
}

然后在您的其他课程中,您可以直接引用该平均值:

class OtherClass: NSObject {
    var randomVar = 0

    func setRandomVar() {
        randomVar = RelativeStrength.average
    }
}

如果您希望在其他课程中使用calculateRSI函数,则只需将static添加到函数名称中,并以相同的方式使用它。

答案 1 :(得分:0)

您也可以使用计算属性。与计算属性的唯一区别在于,出于这种原因,它们看起来更整洁。

class RelativeStrength: NSObject {
    var rsi: Int {
      let relativeStrength1 = 87652
      let relativeStrength2 = 5634

      let rSI1 = 100 - (100 / (relativeStrength1 + 456))
      let rSI2 = 100 - (100 / (relativeStrength2 + 12))

      return (rSI1 + rSI2) / 2
    }
}

然后:

let average = RelativeStrength().rsi
print(average)

这是一个操场上的例子: enter image description here

答案 2 :(得分:-1)

class RelativeStrength: NSObject {

    func calculateRSI() -> CGFloat {
        let relativeStrength1 = 87652
        let relativeStrength2 = 5634

        let rSI1 = 100 - (100 / (relativeStrength1 + 456))
        let rSI2 = 100 - (100 / (relativeStrength2 + 12))

        let average = (rSI1 + rSI2) / 2  

        return average
    }
}


class OtherClass: NSObject {

    let average = RelativeStrength().calculateRSI()
    print(average)
}

或者你可以使用代表

protocol InformingDelegate {
    func averageChanged(average: CGFloat)
}

class RelativeStrength: NSObject {

func calculateRSI() {

    var delegate = InformingDelegate?

    let relativeStrength1 = 87652
    let relativeStrength2 = 5634

    let rSI1 = 100 - (100 / (relativeStrength1 + 456))
    let rSI2 = 100 - (100 / (relativeStrength2 + 12))

    let average = (rSI1 + rSI2) / 2  

    delegate?.averageChanged(average: average)

}

class OtherClass: NSObject, InformingDelegate {

    func averageChanged(average: CGFloat) {
        print(average)
    }
}

}