Swift中,直接在類的外面調用類內部的方法,會出現Bug:Expressions are not allowed at the top level。
原因是:
在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 文件是編譯不成的模塊的,所以會編譯報錯。