Swift - доступ к изменяемому массиву UIVIewcontroller для класса UITableViewCell - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть UIViewController, который содержит UITableView, Я создал отдельный класс для UITableViewCell в соответствии с моей логикой. Я хочу передать массив для каждой строки. Поэтому я создал один изменяемый массив и присваивал новые значения всякий раз, когда вызывается ячейка для метода.

Но изменяемый массив, к которому я не могу получить доступ из UITableViewCell класса

Я использовал следующий код

class PostPage: UIViewController{
    public var imageArray = [String] ()
}

extension PostPage: UITableViewDelegate, UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 10
    }


    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if self.UserDatas?.posts.app[indexPath.row].images?.count ?? 0 > 0 {
            let cell:PostImageCell = tablView.dequeueReusableCell(withIdentifier: "PostImageCell") as! PostImageCell
            self.imageArray = self.UserDatas?.posts.app[indexPath.row].images ?? ["String URL"]
            cell.selectionStyle = .none
            return cell
        }
    }

    class PostImageCell: UITableViewCell{
        override func awakeFromNib() {
            super.awakeFromNib()
            var mainClass : ViewController = ViewController()
            let image = self.mainClass.imageArray
        }
    }
}

Здесь я получаю сообщение об ошибке вроде "Значение типа 'ViewController' не имеет члена 'imageArray'" .

Ответы [ 3 ]

0 голосов
/ 09 ноября 2018

Первый у вас нет ВК с именем ViewController

var mainClass : ViewController = ViewController()
let image = self.mainClass.imageArray

Второй вы либо делаете массив глобальным

class Service {
   static let shared = Service()
   var imageArray = [String] ()
}

Тогда используйте это во всех приложениях

Service.shared.imagArray

Или создайте еще один внутри пользовательского класса ячейки

class PostImageCell: UITableViewCell{
      var imageArray = [String] ()
}

и назначьте его в cellForRowAt

let cell = //
cell.imageArray = imageArray 
0 голосов
/ 09 ноября 2018

Это правильно! "Значение типа 'ViewController' не имеет члена 'imageArray'"

PostPage есть !!!

изменить это: var mainClass: ViewController = ViewController()

к этому: var mainClass: PostPage = PostPage()

Эта ошибка исчезнет.

Но помните: это новый инициализированный объект и сам по себе ничего не содержит.

0 голосов
/ 09 ноября 2018

Ваш код не может работать.

Сделайте наоборот и передайте массив в cellForRow

class PostImageCell: UITableViewCell {
    var imageArray = [String]()
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

   let cell = tableView.dequeueReusableCell(withIdentifier: "PostImageCell") as! PostImageCell
   cell.imageArray = self.UserDatas?.posts.app[indexPath.row].images ?? []
   cell.selectionStyle = .none
   return cell
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...