jjzjj

ios - 不能在属性初始值设定项中使用实例成员 'movies1',属性初始值设定项在 'self' 可用之前运行

coder 2024-01-22 原文

我正在处理一个可扩展的表格 View ,但遇到了一些问题。

这对于测试来说工作正常:

var sections = [
    ExpandTVSection(genre: "genre1", movies: ["movie1A", "movie1B","movie1C"], expanded: false),
    ExpandTVSection(genre: "genre2", movies: ["movie2A", "movie2B","movie2C"], expanded: false),
    ExpandTVSection(genre: "genre3", movies: ["movie3A", "movie3B","movie3C"], expanded: false)
]

我从 Firebase 获取数据,所以我尝试设置第一部电影的名称

var movies1 = [String]()
var movies2 = [String]()
var movies3 = [String]()

func fetchMovies(){
    var datref: DatabaseReference!
    datref = Database.database().reference()
    datref.child("movies1").child("names").observe(
        .childAdded,
        with: {
            (snapshot) in         
                if let dictionary = snapshot.value as? [String: AnyObject]{
                    let movie = MoviesInfo(dictionary: dictionary)
                    movie.setValuesForKeys(dictionary)
                    self.movies1.append(movie.Name!)
                }
            },
        withCancel: nil)
}

// !! program breaks here due to movies1 !!

var sections = [
    ExpandTVSection(genre: "genre1", movies: movies1, expanded: false),
    ExpandTVSection(genre: "genre2", movies: ["movie2A", "movie2B","movie2C"], expanded: false),
    ExpandTVSection(genre: "genre3", movies: ["movie3A", "movie3B","movie3C"], expanded: false)
]

我一尝试应用它,我的程序就崩溃了:

Cannot use instance member 'movies1' within property initializer, property initializers run before 'self' is available

更多可能有用的信息:

struct ExpandTVSection {
    var genre: String!
    var movies: [String]!
    var expanded: Bool!

    init(genre: String, movies: [String], expanded: Bool) {
        self.genre = genre
        self.movies = movies
        self.expanded = expanded
    }
}

最佳答案

Swift 不允许您在另一个属性(sections)的初始化表达式中使用属性(movies1)。相反,您可以在初始化程序中初始化您的属性(在调用父类(super class)初始化程序之后),或者在您的情况下只需执行以下操作:

ExpandTVSection(genre: "genre1", movies: [], expanded: false)

代替

ExpandTVSection(genre: "genre1", movies: movies1, expanded: false)

因为你的 movies1 是用一个空数组初始化的。

关于ios - 不能在属性初始值设定项中使用实例成员 'movies1',属性初始值设定项在 'self' 可用之前运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46186450/

有关ios - 不能在属性初始值设定项中使用实例成员 'movies1',属性初始值设定项在 'self' 可用之前运行的更多相关文章

  1. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

  2. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  3. ruby-on-rails - 未初始化的常量 Psych::Syck (NameError) - 2

    在我的gem中,我需要yaml并且在我的本地计算机上运行良好。但是在将我的gem推送到ruby​​gems.org之后,当我尝试使用我的gem时,我收到一条错误消息=>"uninitializedconstantPsych::Syck(NameError)"谁能帮我解决这个问题?附言RubyVersion=>ruby1.9.2,GemVersion=>1.6.2,Bundlerversion=>1.0.15 最佳答案 经过几个小时的研究,我发现=>“YAML使用未维护的Syck库,而Psych使用现代的LibYAML”因此,为了解决

  4. ruby-on-rails - 如果为空或不验证数值,则使属性默认为 0 - 2

    我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val

  5. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  6. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  7. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  8. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

  9. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  10. ruby - 多个属性的 update_column 方法 - 2

    我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2

随机推荐