Expressions are not allowed at the top level

Swift中,直接在类的外面调用类内部的方法,会出现Bug:Expressions are not allowed at the top level。

原因是:
在App工程里, .swift文件都是编译成模块的,不能有top level code

先明确一个概念,一个.swift文件执行是从它的第一条非声明语句(表达式、控制结构)开始的,同时包括声明中的赋值部分,所有这些语句,构成了该.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 文件是编译不成的模块的,所以会编译报错。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值