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 文件是编译不成的模块的,所以会编译报错。

转载于:https://www.cnblogs.com/yaoyao0110/p/5499738.html

Expressions are not allowed at the top level相关推荐

  1. 【104】Maven3.5.0结合eclipse使用,提示Lambda expressions are allowed only at source level 1.8 or above错误的解决方法

    [104]Maven3.5.0结合eclipse使用,提示Lambda expressions are allowed only at source level 1.8 or above错误的解决方法 ...

  2. lambda expressions are not supported at this language level

    IDEA下报错:lambda expressions are not supported at this language level 解决: 1. File -> Project Struct ...

  3. PAT (Top Level) Practise 1008 Airline Routes(Tarjan模版题)

    1008. Airline Routes (35) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue Given a ...

  4. react 中使用import()实现按需加载报错 解决方法 --‘import’ and ‘export’ may only appear at the top level

    react 中使用import()实现按需加载报错 解决方法 --'import' and 'export' may only appear at the top level 参考文章: (1)rea ...

  5. Protobuf的奇怪问题解决--Expected top - level statement (e.g message)

    最近天天都在玩Protobuf,因此,最近总结的问题过半都是关于它的.话说昨天遇到一个很奇怪的问题,转换.proto为java文件的过程中,报错:Expected top - level statem ...

  6. nib must contain exactly one top level object which must be a UITableViewCell instance

    今天突然报了这个错误:"nib must contain exactly one top level object which must be a UITableViewCell insta ...

  7. iOS开发-invalid nib registered for identifier (Cell) - nib must contain exactly one top level object

    error reason: 'invalid nib registered for identifier (WorksCell) - nib must contain exactly one top ...

  8. invalid nib registered for identifier (xxx) - nib must contain exactly one top level object······

    最近应公司需求学ios开发(根本整不明白)遇见了个如下的错误: invalid nib registered for identifier (xxx) - nib must contain exact ...

  9. xib报错“nib must contain exactly one top level object which must be a UITableViewCell instance”

    xib使用过程中报错及解决办法 错误原因:"nib must contain exactly one top level object which must be a UITableView ...

最新文章

  1. Ubuntu 配置大数据平台hadoop hive数据仓库之完整踩坑
  2. python顺序执行 toggle_pythonkivymd:如何使toggle_nav_drawer()函数工作?
  3. Eclipse is running in a JRE, but a JDK is required
  4. java resouce_深入了解 Java Resource Spring Resource
  5. Spring MVC学习总结(3)——Spring3 MVC详解
  6. 腾讯超级大脑发布!马化腾要用三张智能网络,打造AI in All通用操作系统
  7. 微型计算机的现状历史未来,微型计算机的发展历史、现状和未来
  8. NonActionAttribute使用说明
  9. 学习笔记之TCP/IP协议分层与OSI參考模型
  10. IDEA若依框架新建模块
  11. MAC-多开程序两种方法
  12. ES6的新特性,前端必看知识点
  13. 如何用Latex写一篇小论文
  14. 为鼓励居民节约用水,自来水公司采取按月用水量分段计费的办法,居民应交水费y(元)与月用水量x(吨)的函数关系式如下(设x>0)。编写程序,输入用户的用水量x(吨),计算并输出用户应该支付的水费y(元)
  15. php英语大全,学习php编程语言 php常用英语单词
  16. 十问数据库:问来路,问现在,问未来
  17. 一名大一新生的年终总结
  18. 关于曼哈顿距离的最小生成树 POJ3241
  19. 嵌入式linux 使用ntpdate命令同步时间
  20. 2021-03-25

热门文章

  1. 漫谈中国自主杀毒引擎
  2. 自动构建工具Grunt
  3. 一个简单的遮罩弹出层效果
  4. 笔试题——JavaScript事件循环机制(event loop、macrotask、microtask)
  5. 重新理解 Monad
  6. 台积电新工艺路线图披露:7nm最快明年4月试产
  7. 在JAVA中使用MongoDB
  8. lsnrctl 与 tnsnames.ora 的联系
  9. JSON的使用・小结
  10. js在firefox中的问题