我试图在视图控制器之间传递结构,但出现编译器错误“ @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!)
}
}
答案 0 :(得分:2)
仅当从xib或情节提要中加载属性时,才使用@IBoutlet
定义属性。由于您要从另一个视图控制器传递数据结构,因此只需将finalObj
定义为常规变量。
class VCTwo2: UIViewController {
var finalObj: DocObject!
override func viewDidLoad() {
super.viewDidLoad()
}
}