@IBOutlet属性不能具有非对象类型

时间:2020-03-12 05:13:50

标签: swift xcode viewcontroller

我试图在视图控制器之间传递结构,但出现编译器错误“ @IBOutlet属性不能具有非对象类型”。我尝试添加@objc,但仍然收到错误。如何在视图控制器之间传递此数据?为什么会出现此错误,如何解决?谢谢。

import UIKit
struct DocObject: Codable {
    let filename: String
    let doclink: Int
}

class ViewController: UIViewController {   
    @IBOutlet weak var textField: UITextField!   
    //  var nameText = ""
    var obj = DocObject(filename: "filename", doclink: 123)    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    @IBAction func done(_ sender: Any) {
        print ("In VC1 nameText  ", obj)
        performSegue(withIdentifier: "name", sender: self)   
    }
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let vc = segue.destination as! VCTwo2
        vc.finalObj = obj   
    }    
}





import UIKit
class VCTwo2: UIViewController {
    @IBOutlet var finalObj: DocObject!

    //  var finalName = 0

    override func viewDidLoad() {
        super.viewDidLoad()

        print ("In VC2  ", finalObj!)        
    }

}

1 个答案:

答案 0 :(得分:2)

仅当从xib或情节提要中加载属性时,才使用@IBoutlet定义属性。由于您要从另一个视图控制器传递数据结构,因此只需将finalObj定义为常规变量。

class VCTwo2: UIViewController {
    var finalObj: DocObject!
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}