Используйте функцию из структуры в классе - PullRequest
0 голосов
/ 11 мая 2018

Я новичок в Swift и у меня проблемы с использованием классов и структур.

У меня есть структура с именем Workspace:

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

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

Вот мой класс User:

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)

Прежде чем поместить его в структуру, он был непосредственно вкласс, но так как я изменил его, он больше не работает, так что я думаю, что я могу назвать это неправильно?

1 Ответ

0 голосов
/ 11 мая 2018

WorData ноль.

Условное развертывание (co.WorData?.getUserWorkspace(base: co.Base) проверит, что WorData имеет значение перед попыткой вызова метода. Если это был ноль, а Swift этого не делал, он вылетел бы.

Вам нужно либо постоянно устанавливать его как новое

var worData = Workspace() 

Установите его после класса init

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

или требовать инициализации вашего объекта User с помощью рабочей области

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

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

}
...