Expressions are not allowed at the top level

Swift中,直接在類的外面調用類內部的方法,會出現Bug:Expressions are not allowed at the top level。express

緣由是:swift

  在App工程裏, .swift 文件都是編譯成模塊的,不能有  top level code。函數

  先明確一個概念,一個 .swift 文件執行是從它的第一條非聲明語句(表達式、控制結構)開始的,同時包括聲明中的賦值部分(對應爲 mov 指令或者 lea 指令),全部這些語句,構成了該 .swift 文件的 top_level_code() 函數。而全部的聲明,包括結構體、類、枚舉及其方法,都不屬於 top_level_code() 代碼部分,其中的代碼邏輯,包含在其餘區域,top_level_code() 能夠直接調用他們。程序的入口是隱含的一個 main(argc, argv) 函數,該函數執行邏輯是設置全局變量 C_ARGC C_ARGV,而後調用 top_level_code()。不是全部的 .swift 文件均可以做爲模塊,目前看,任何包含表達式語句和控制語句的 .swift 文件都不能夠做爲模塊。正常狀況下模塊能夠包含全局變量(var)、全局常量(let)、結構體(struct)、類(class)、枚舉(enum)、協議(protocol)、擴展(extension)、函數(func)、以及全局屬性(var { get set })。這裏的全局,指的是定義在 top level 。這裏說的表達式指 expression ,語句指 statement ,聲明指 declaration 。所以,若是代碼中直接在類的外面調用類內部的方法,則該.swift 文件是編譯不成的模塊的,因此會編譯報錯。spa

相關文章
相關標籤/搜索