Swift 4:类型为'的值;(SomeUIViewController)>;()->;(SomeUIViewController)和#x27;没有成员';someMemberItem';

Swift 4:类型为'的值;(SomeUIViewController)>;()->;(SomeUIViewController)和#x27;没有成员';someMemberItem';,swift,uitableview,uiviewcontroller,Swift,Uitableview,Uiviewcontroller,我正在以编程方式尝试以编程方式从不同的UITableViewCell选择打开新的UIViewController 我是这样做的: override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let destination = SomeUIViewController() destination.someMemberItem = someDataArray[inde

我正在以编程方式尝试以编程方式从不同的UITableViewCell选择打开新的UIViewController

我是这样做的:

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 {

其中,错误表示“类型的值”(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
    }
}

你得到这个是因为

var someMemberItem : SomeMemberItemClass
正如您所说,SomeUIViewController没有定义
someMemberItem的默认值的初始化器

若它是struct,那个么就不会有任何错误,因为struct默认提供成员初始值设定项

如果自定义类型的存储属性在逻辑上允许为“无值”-可能是因为在初始化过程中无法设置其值,或者是因为在以后某个时候允许其为“无值”,请使用可选类型声明该属性。可选类型的属性将使用值nil自动初始化,这表明该属性有意在初始化期间“还没有值”

你有以下选择

1) 提供默认值


2) 使其成为可选的

对子视图执行
惰性初始化解决了我遇到的问题。就是说

lazy var someMemberItemLabel: UILabel = {
    // 
}()

等等。

请提供“SomeMemberItemClass”的信息class@KhushbuSomeMemberItem是一个结构,而不是类,这是我的错误。
SomeMemberItem
是一个结构,我输入错误。我得到一个结构的错误。@Q.H。但是如果没有它的初始值或可选或惰性类型,则不能声明属性。你不是说“诸如此类”吗?;-)
lazy var someMemberItemLabel: UILabel = {
    // 
}()