Я программно пытаюсь открыть новый UIViewController из другого выбора UITableViewCell программно.
Я делаю это так:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let destination = SomeUIViewController()
destination.someMemberItem = someDataArray[indexPath.row]
navigationController?.pushViewController(destination, animated: true)
}
SomeUIViewController
- это UIViewController
, в котором есть один переменный элемент, который мне нужен для отображения.
SomeUIViewController
инициализируется следующим образом:
class SomeUIViewController: UIViewController {
var someMemberItem : SomeMemberItemStruct
// MARK: Layout
let someMemberItemImage: UIImageView = {
let view = UIImageView(frame: CGRect(x: 20, y: 20, width: 300, height: 300))
if let imageUrl = self.someMemberItem.imageUrl {
let data = NSData(contentsOf: imageUrl)
view.image? = UIImage(data: data)
} else {
view.image = nil // Set default image
}
return view
}()
let someMemberItemLabel: UILabel = {
let label = UILabel(frame: CGRect(x: 100, y: 200, width: 100, height: 50))
label.text = self.someMemberItem.name
label.textColor = .black
label.font = UIFont.boldSystemFont(ofSize: 16)
return label
}()
func setUpNavigationBar() {
navigationItem.title = self.someMemberItem.name
navigationController?.navigationBar.barTintColor = UIColor(r: 30, g: 255, b: 198)
navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.darkGray, NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize: 20)]
}
func setUpSomeMemberItemView() {
self.view.addSubview(someMemberItemLabel)
self.view.addSubview(someMemberItemImage)
}
override func viewDidLoad() {
super.viewDidLoad()
setUpNavigationBar()
setUpSomeMemberItemView()
}
}
public extension UIColor {
public convenience init(r: CGFloat, g: CGFloat, b: CGFloat) {
self.init(red: r/255, green: g/255, blue: b/255, alpha: 1)
}
}
Как указано выше, все это приложение выполняется программно.
Я получаю сообщение об ошибке "Класс 'SomeUIViewController' не имеет инициализаторов"
Я получаю ту же ошибку в следующих строках:
if let imageUrl = self.someMemberItem.imageUrl {
и
label.text = self.someMemberItem.name
Где в сообщении об ошибке указано «Значение типа» (SomeUIViewController) -> () -> (SomeUIViewController) 'не имеет члена «someMemberItem'».
Кто-нибудь сталкивался с этой ошибкой раньше и знает, как ее устранить?
Обновление:
SomeMemberItemStruct
определяется как:
public struct SomeMemberItemStruct: Decodable {
let id: Int
let name : String
let imageUrl : String?
let description : String
enum CodingKeys: String, CodingKey {
case id
case name
case imageUrl
case description
}
}