首页 > 解决方案 > 在类中使用结构中的函数

问题描述

我是 Swift 新手,在使用类和结构时遇到了麻烦。

我有一个名为 Workspace 的结构:

struct Workspace: Decodable {
var guid: String
var name: String

func getUserWorkspace(base: String, completed: @escaping () -> ()){
        //some code
    }
}

这是我的班级用户:

public class User {

    var Wor = [Workspace]()
    var WorData:Workspace? = nil

   //+some other var & functions
}

所以我在视图控制器中所做的是:

class SecondViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

@IBOutlet weak var listView: UITableView!

var co = User()

override func viewDidLoad() {
    super.viewDidLoad()

    co.WorData?.getUserWorkspace(base: co.Base) {
        print("success")
        self.listView.reloadData()
        self.updateVertically()
    }
    listView.delegate = self
    listView.dataSource = self
}

问题是代码永远不会进入函数 co.WorData?.getUserWorkspace(base: co.Base)

在我将它放入结构之前,它直接在课堂上,但自从我改变它后它就不再起作用了,所以我想我可能会以错误的方式称呼它?

标签: iosswiftfunctionclassstructure

解决方案


WorData是零。

条件展开 (co.WorData?.getUserWorkspace(base: co.Base)将在尝试调用该方法之前检查 WorData 是否有一个值。如果它是 nil 并且 Swift 没有这样做,它会崩溃。

您要么需要一直将其设置为新的

var worData = Workspace() 

在类初始化之后设置它

var user = User()
user.worData = Workspace() // or pass a specific one in

或要求使用 Workspace 初始化您的 User 对象

class User: NSObject {
    var wor = [Workspace]()
    var workspace: Workspace // use lower camel case for var names

    required init(workspace: Workspace) {
        self.workspace = workspace
    }

}

推荐阅读