Ввод данных в другую структуру в другом классе - PullRequest
0 голосов
/ 18 декабря 2018

Я уже ищу в Интернете, я до сих пор не понимаю, как вставить значение в переменную.я пытаюсь вставить значение в переменную, чтобы я мог добавить его в массив, а затем поместить его в tableviewcell.

Я понимаю, как работают ячейки, я просто хотел узнать, как я могу вставить данные в эту переменную

Вот код моей структуры

import Foundation
import UIKit

enum issueType: String {
 case major = "Major", blocker = "Blocker", minor = "Minor"
}

struct Issue {
var id: String
var tester: String
var type: issueType
var title: String
var appName: String
var desc: String
var date: Date
var bgColor: UIColor?

init(){
    id = ""
    tester = ""
    type = .minor
    title = ""
    appName = ""
    desc = ""
    date = Date()
    bgColor = UIColor.main()
}

init(item: [String:Any]){
    self.init()
    id = item["id"] as? String ?? ""
    tester = item["tester"] as? String ?? ""
    title = item["title"] as? String ?? ""
    appName = item["appName"] as? String ?? ""
    desc = item["desc"] as? String ?? ""

    if type == .major {
        bgColor = UIColor.main()
    }
    else if type == .blocker {
        bgColor = UIColor.blue
    }
    else {
        bgColor = UIColor.green
    }
}
}

Воткод для переменной в superDidLoad из другого класса

    override func viewDidLoad() {
    super.viewDidLoad()

    var issue1 = Issue(id: "id", tester: "tester", type: .minor, title: "title", appName: "appName", desc: "desc", date: Date())
    issue1.bgColor = UIColor.main()

    array.append(issue1)
}

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

После добавления вашего собственного инициализатора в структуру вы потеряли стандартный элементный инициализатор.Чтобы избежать этого, используйте расширение:

struct Issue {
    var id: String
    var tester: String
    var type: issueType
    var title: String
    var appName: String
    var desc: String
    var date: Date
    var bgColor: UIColor?
}

extension Issue {
    init(){
        id = ""
        tester = ""
        type = .minor
        title = ""
        appName = ""
        desc = ""
        date = Date()
        bgColor = UIColor.main()
    }

    init(item: [String:Any]){
        self.init()
        id = item["id"] as? String ?? ""
        tester = item["tester"] as? String ?? ""
        title = item["title"] as? String ?? ""
        appName = item["appName"] as? String ?? ""
        desc = item["desc"] as? String ?? ""

        if type == .major {
            bgColor = UIColor.main()
        }
        else if type == .blocker {
            bgColor = UIColor.blue
        }
        else {
            bgColor = UIColor.green
        }
    }
}

Но даже в этом случае вы должны инициализировать все свойства инициализатором по умолчанию, включая 'bgColor'.

var issue1 = Issue(id: "id", tester: "tester", type: .minor, title: "title", appName: "appName", desc: "desc", date: Date(), bgColor: nil)
0 голосов
/ 18 декабря 2018

Ваш подкласс UITableViewCell должен иметь некоторую переменную типа Issue

class YourSubclass: UITableViewCell {

    var issue: Issue?
    ...
}

, затем в cellForRowAt Метод источника данных TableView назначает переменную ячейки как элемент из array с индексом, равным indexPath.row

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    ...
    cell.issue = array[indexPath.row]
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...