Swift 4:类型为'的值;(SomeUIViewController)>;()->;(SomeUIViewController)和#x27;没有成员';someMemberItem';
我正在以编程方式尝试以编程方式从不同的UITableViewCell选择打开新的UIViewController 我是这样做的: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
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 = {
//
}()