ios - Swift 为什么我的函数调用只在 viewDidLoad 中有效

标签 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 does not have a member named 'forceView2'”的错误。

最佳答案

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

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

关于ios - Swift 为什么我的函数调用只在 viewDidLoad 中有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28297240/

相关文章:

iphone - 在 iPhone iOS 上堆叠多个具有透明度的图像

ios - UICollectionView 中的自动布局约束发生变化

swift - 使用 SwiftUI 调整宽度/水平对齐

ios - 当按下带有 html 目标 ="_blank"的链接时,用于 navigationAction 函数的 WKWebView 不会从另一个 swift 类调用

ios - 如何在grails代码中获取设备(ipad)的方向

ios - 如何在 iOS 8 中为特定 Controller 禁用自动旋转?

ios - 从collectionview中删除viewcontroller中的 subview (uiview)

swift - 忽略标志指针 0x10ef76ec0 : no flag found at that address in Xcode 的 RegisterValidateFunction()

ios - 如何在 xcconfig 和引号中定义字符串

ios - Firebase:我应该如何构建我的数据库?喜欢 Offerup 和 Letgo