вызвать дочерние данные из базы данных - PullRequest
0 голосов
/ 20 мая 2019

Добрый вечер,

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

fileprivate func fetchUsersFromDatabase() {
    Database.database().reference().child("JobPost").observeSingleEvent(of: .value, with: {(Snapshot) in
        if let eachDict = Snapshot.value as? NSDictionary{
            for each in eachDict{

       //I think the issue is caused by the let post = poster
            let post = Poster(dictionary: Snapshot.value as! [String : Any])
            self.cardViewModels.append(post.toCardViewModel())
            print(each.value )
            }

        }
        self.setupDummyCards()
    }, withCancel: {(Err) in
  })
}

// структура находится в файле расширения.

struct Poster: ProducesCardViewModel{
var jobName : String?
var price: Int?
var postName: String?
var ImageUrl1: String?
var uid: String?

init(dictionary: [String: Any]) {
    self.price = dictionary["cost"] as? Int
    self.jobName = dictionary["category"] as? String
    self.postName = dictionary["description"] as? String ?? ""
    self.ImageUrl1 = dictionary["JobImageUrl"] as? String ?? ""
    self.uid = dictionary["fromId"] as? String ?? ""
}

func toCardViewModel() -> CardViewModel {
    let attributedText = NSMutableAttributedString(string: jobName ?? "", attributes: [.font: UIFont.systemFont(ofSize: 32, weight: .heavy)])
    let priceString = price != nil ? "\(price!)" : "N\\A"
    attributedText.append(NSAttributedString(string: "  \(priceString)", attributes: [.font: UIFont.systemFont(ofSize: 24, weight: .regular)]))
    let jobString = jobName != nil ? jobName! : "Not available"
    attributedText.append(NSAttributedString(string: "\n\(jobString)", attributes: [.font: UIFont.systemFont(ofSize: 20, weight: .regular)]))
    return CardViewModel(imageNames: [ImageUrl1 ?? "" ], attributedString: attributedText, textAlignment: .left)
 }
}

Пример

// toCardViewModel

import UIKit

 protocol ProducesCardViewModel {
func toCardViewModel() -> CardViewModel
 }
    class CardViewModel {

let JobimageName: [String]
let attributedString: NSAttributedString
let textAlignment: NSTextAlignment

init(imageNames: [String], attributedString: NSAttributedString, textAlignment: NSTextAlignment) {
    self.JobimageName = imageNames
    self.attributedString = attributedString
    self.textAlignment = textAlignment
}

fileprivate var imageIndex = 0 {
    didSet {
        let imageName = JobimageName[imageIndex]
        let image = UIImage(named: imageName)
        imageIndexObserver?(imageIndex, image)
    }
}

var imageIndexObserver: ((Int, UIImage?) -> ())?

func advanceToNextPhoto() {
    imageIndex = min(imageIndex + 1, JobimageName.count - 1)
}

func goToPreviousPhoto() {
    imageIndex = max(0, imageIndex - 1)
}
}

Заранее спасибо!

// P.S. Ранее я публиковал этот вопрос без недостатка подробностей. Я решил просто опубликовать его с качественным материалом. Я очень ценю ваше время.

1 Ответ

0 голосов
/ 20 мая 2019

Я разобрался с ответом, и он был для меня совершенно очевиден. Я заметил, что

print(each.value ) 

напечатает значение, поэтому я просто подставил

let post = Poster(dictionary: Snapshot.value as! [String : Any])

до

 let post = Poster(dictionary: each.value as! [String : Any])

и все стало работать просто отлично!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...