Swift为什么我的函数调用仅适用于viewDidLoad

时间:2015-02-03 11:00:04

标签: ios xcode swift

概念性问题。为什么我的函数调用仅在viewDidLoad中工作?

import UIKit

class ViewController2: UITableViewController, UITableViewDataSource {


    @IBOutlet var tableview2: UITableView!

    var forceView2 = [Float]()
    var stiffView2 = [Float]()
    var springNumView2 : NSInteger = NSInteger()  

    override func viewDidLoad() {
        super.viewDidLoad()

        println(self.forceView2)
        println(self.stiffView2)
        println(self.springNumView2)

        var Answer = calculate(forceView2, stiffView2, springNumView2)

        println(Answer.self)            
    }

如果 var Answer = calculate(forceView2,stiffView2,springNumView2)放在viewDidLoad上方,则ViewController2.type的错误没有名为' forceView2&#的成员39;

3 个答案:

答案 0 :(得分:4)

如果将该行移出方法范围,实际上是将局部变量转换为属性。这样,Answer属性对所有实例方法都可见,但也可以从外部访问。

您的情况下的问题是该属性是使用实例函数的返回值初始化的,该函数间接引用self - 但swift在初始化期间不允许引用self,这就是你有编译错误的原因。

答案 1 :(得分:1)

你试图在类体中调用一个函数,而不是在一个方法中调用它。

答案 2 :(得分:1)

您当然可以创建计算属性。返回计算值的属性: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html#//apple_ref/doc/uid/TP40014097-CH14-ID259

这些方面应该有效:

var answer : [Float] { return calculate(forceView2, stiffView2, springNumView2) }