我试图在视图控制器之间传递一个结构,但收到编译器错误"@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!)
}
}
只有从xib或序列图像板加载属性时,才能使用@IBoutlet
定义该属性。由于您正在从另一个视图控制器传递数据结构,因此只需将finalObj
定义为常规变量
class VCTwo2: UIViewController {
var finalObj: DocObject!
override func viewDidLoad() {
super.viewDidLoad()
}
}