这里出了啥问题:实例成员不能用于类型 [重复]
Posted
技术标签:
【中文标题】这里出了啥问题:实例成员不能用于类型 [重复]【英文标题】:What's wrong here: Instance member cannot be used on type [duplicate]这里出了什么问题:实例成员不能用于类型 [重复] 【发布时间】:2015-09-21 10:38:55 【问题描述】:我有以下代码,但我对这个错误消息感到困惑:
实例成员“mydate”不能用于类型“TableViewController”
代码:
class TableViewController: UITableViewController
let mydate = NSDate()
let items = [
(1, 9, 7, "A", mydate),
(2, 9, 7, "B", mydate),
(3, 9, 7, "C", mydate),
(4, 9, 7, "D", mydate)
]
当我编写以下内容时,我可以构建它,但我不知道为什么 oder sn-p 不起作用:
class TableViewController: UITableViewController
let mydate = NSDate()
let items = [
(1, 9, 7, "A", nil),
(2, 9, 7, "B", mydate),
(3, 9, 7, "C", mydate),
(4, 9, 7, "D", mydate)
]
【问题讨论】:
我遇到了同样的事情。你最干净的选择是在类中定义它们,但在你的 viewDidLoad() 函数中填充它们。这将允许您嵌套所有您想要的内容,而不会出现这些烦人的编译错误。 @MarkLöwe,这不是“最干净的解决方案”。并且这些编译器错误是有效的并且与语言的设计一致。最干净的解决方案是这里写的解决方案。在viewDidLoad
中初始化可能在非基于视图控制器的类中甚至是不可能的。我们不要用可笑的 cmets 误导人们。
内部静态变量 mydate : NSDate;内部静态变量项;这是解决此问题的简单方法
【参考方案1】:
这里的问题是你在类完全初始化之前使用self
。您可以有一个 getter,每次访问变量时都会调用它,也可以懒惰地计算它。
这里有一些代码:
class TableViewController: UITableViewController
let mydate = NSDate()
var items : [(Int,Int,Int,String,NSDate)]
get
return [
(1, 9, 7, "A", mydate),
(2, 9, 7, "B", mydate),
(3, 9, 7, "C", mydate),
(4, 9, 7, "D", mydate)
]
惰性计算:
class TableViewController: UITableViewController
let mydate = NSDate()
lazy var items : [(Int,Int,Int,String,NSDate)] =
return [
(1, 9, 7, "A", self.mydate),
(2, 9, 7, "B", self.mydate),
(3, 9, 7, "C", self.mydate),
(4, 9, 7, "D", self.mydate)
]
()
【讨论】:
你能举个例子吗? 你去。这行得通。 @AboveTheGods 别再这么卑鄙了 @rockyraccoon,有时候,最好的做法就是点头微笑。 :)【参考方案2】:您可以使用此代码
var items:Array<(Int, Int, Int, String, NSDate)>
get
return [
(1, 9, 7, "A", mydate),
(2, 9, 7, "B", mydate),
(3, 9, 7, "C", mydate),
(4, 9, 7, "D", mydate)
]
【讨论】:
【参考方案3】:编译器会感到困惑,因为它不知道可选NSDate
的类型。你可以让它明确地知道类型。
let items : Array<(Int, Int, Int, String, NSDate?)> = [
(1, 9, 7, "A", nil),
(2, 9, 7, "B", mydate),
(3, 9, 7, "C", mydate),
(4, 9, 7, "D", mydate)
]
编辑:对于使用实例变量的问题,您可以使用闭包来初始化您的项目。
let items : Array<(Int, Int, Int, String, NSDate?)> =
let mydate = NSDate()
return [
(1, 9, 7, "A", nil),
(2, 9, 7, "B", mydate),
(3, 9, 7, "C", mydate),
(4, 9, 7, "D", mydate)
]
()
【讨论】:
此修复程序仍然出现错误以上是关于这里出了啥问题:实例成员不能用于类型 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
静态成员“负载”不能用于“AppDelegate”类型的实例
实例成员不能用于 struct swift 之间的嵌套类型的实例
实例成员 'count' 不能用于类型 'TweetFilterOptions.AllCases'