我在课堂上定义了这个:
class TableViewController: UITableViewController {
let sections = ["Design", "Development", "Mobile"]
var blogPost1 = ["title" : "StackOverflow", "author" : "John Doe"]
var blogPost2 = ["Getting started" : "title", "John" : "author"]
var posts = [blogPost1, blogPost2]
override func viewDidLoad() {
super.viewDidLoad()
var blogPosts = [blogPost1, blogPost2]
}
}
我不明白为什么我能够在viewDidLoad
内创建blogPosts变量但不能在blogPost2下的类中创建?如果我尝试,Xcode将不会自动完成并返回一个错误,指出ViewController没有名为“blogPost1”的成员。但是我可以在viewDidLoad()中创建它,但我不知道如何在其他函数中使用它。
第二期:
我有一个TableViewController。在cellForRowAtIndexpath中,我正在尝试发送此消息:
var posts = blogPosts.objectAtIndex(indexPath.row)
但自动完成中不建议使用objectAtIndex。我确定这是一个新手的错误,但我迷失了。有什么想法吗?
答案 0 :(得分:0)
对于第二个问题, objectAtIndex 是NSArray类的方法,而您创建的变量blogPosts是Array(Swift)的类型。
只需使用下标语法:
var posts = blogPosts[indexPath.row]
答案 1 :(得分:0)
第一个问题的答案是,使用默认值初始化属性无法访问self
,因为该对象尚未完全初始化。您需要将初始化移动到init方法中。
init() {
blogPost1 = ["title" : "StackOverflow", "author" : "John Doe"]
blogPost2 = ["Getting started" : "title", "John" : "author"]
posts = [blogPost1, blogPost2]
}
另请注意,您对键和值的使用不一致,以后会咬你的。
正如Oguz指出的那样,你的第二个问题是你试图在数组上使用NSArray方法,最简单的方法是使用blogPosts[indexPath.row]
但是,这可能对你不起作用,因为blogPosts不是' t定义为一个属性,它被定义为函数中的局部变量。您可以使用posts[indexPath.row]