Swift视频教程第1讲开篇介绍

Swift视频教程第1讲开篇介绍

一、在线浏览

  • 视频内容:Swift视频教程第1讲开篇介绍
  • Xcode版本:6.1
  • 个人主页:http://00red.com

二、百度网盘资源下载

三、Swift程序入口深度分析(课外拓展)

1.swift为什么不需要main

在c/c++及其它语言中都有一个main函数,程序从main作为起点,开始执行程序,如下:

1
2
3
4
int main(int argc, const char * argv[]) {
    printf("Hello, World!\n");
    return 0;
}

main函数实际上是一个特殊的函数,为了能找到程序入口,大多楼语言都约定main()函数作为入口。那么为什么在Swift中没有这样的一个函数呢?先看一下官方的解释

Code written at global scope is used as the entry point for the program, so you don’t need a main function.

大体意思是,在main.swift中的代码是在全局作用域下,这些代码直接作为整个项目的入口,所以这里并不需要main函数。

2.C与Swift的入口对比

在ios/osx系统中,C/Objective-c项目也有main()函数的约定,在项目入口main()代码块打断点

从上图可以看出在执行程序前,先调用了start()方法,而后再执行约定的main()方法,这种我们能够很好理解,那么在swift下情况如何呢?

从上图可以看出Swift的执行顺序是start()–>main()–>top_level_code(),相对于C语言项目,多出来top_level_code(),在main.swift中的(非声明)代码会直接作为top_level_code()代码执行。此处要注意在Swift语言本身并不需要入口函数,程序入口是指定为main.swift中的非声明代码。在具体编译环节,ios/osx的入口均采用约定的main()函数,为了兼容以前的入口方法,将Swift语言程序在编译环节处理成隐式入口函数top_level_code(),再由main()调用。

3.代码top_level_code()

在官方解释

Code written at global scope is used as the entry point for the program, so you don’t need a main function.

提及到全局作用域,main.swift中的声明(如变量、常量、类、结构体、枚举)类代码,会作为全局作用域,在程序的任何都方都可以使用。而其中的非声明(赋值、for循环、if语句等)代码,会作为top_level_code()中代码来执行。这里注意,声明类代码与非声明类代码的作用域并不相同。声明类的作用域是全局作用域,而非声明类代码为top_level_code()作用域。

这里特别注意,只有在main.swift中的代码才可以作为top_level_code来执行。
而在其它文件中,是不能直接在文件中含有非声明类的语句,只能含有声明类的代码。

4.偷天换日,替换隐式入口函数top_level_code()

在编译环节,编译器将main.swift非声明代码作为top_level_code()来执行,为了能够让程序执行我们的入口函数,而不是main.swift代码,需要声明并实现这个特殊的top_level_code()函数

1
void top_level_code();

下一步如何让编译程序指定我们写的top_level_code(),这里需要注意

  • main.swift文件不能删除,如果删除程序直接不能编译通过
  • 为了能让编译程序认可我们写的top_level_code()函数,我们需要在main.swift文件中主动使用一次top_level_code() 这里的使用是指两种情况:
    1. 在main.swift直调用我们写的top_level_code()函数
    2. 在main.swift的声明类、结构体等的方法中调用top_level_code()函数 注意这两种方法都会导致main.swift中的所有代码不再执行。此处在main.swift加入上述代码的作用就是让编译器改调用我们写的top_level_code函数

具体可以直接下载项目来研究 为了测试里面用到了

1. Swift项目调用C及Objective-c代码的办法
2. Objective-c代码调用Swift代码
3. 类的声明

这部分的知识会在后面一一讲解到,大家只需要了解入口的原理即可。

5.Swift打印入口参数

在C言语中的main函数中,有两个参数

  • argc:  命令行中字符串数
  • argv: 指向字符串的指针数组

这两个参数在Swift中被声明为全局变量,分别为

  • C_ARGC
  • C_ARGV

我们也可以在Swift中将入口参数打印出来,注意C中类型与Swift的类型转换

1
2
3
4
5
6
7
8
9
10
//将C语言int型转换为Swift中的Int
let cout = Int(C_ARGC)
println("all->\(cout)")

let end = cout - 1
for index in 0...(end) {
    //获取指定C语言字符串,并将C字符串转换为Swift的String类型
    let str = String.fromCString(C_ARGV[index])
    println("\(str)")
}

点击运行完成后–>将项目Products目录入的文件直接拖入终端中->在后面添加空格”aaa”空格”bbb”,类似下面的格式

1
/Users/mac/Library/Developer/Xcode/DerivedData/ILHelloWorld-fvywvzypiomcffbiuxdxwwdaeued/Build/Products/Debug/ILHelloWorld "aaa" "bbb"

打印运行结果如下:

1
2
3
4
all->3
Optional("/Users/mac/Library/Developer/Xcode/DerivedData/ILHelloWorld-fvywvzypiomcffbiuxdxwwdaeued/Build/Products/Debug/ILHelloWorld")
Optional("aaa")
Optional("bbb")

其中第一个参数为默认的程序路径,第二个及第三个参数为我们在上面输入的aaa及bbb,加起来共3个参数

时间: 2024-10-16 21:09:14

Swift视频教程第1讲开篇介绍的相关文章

智捷公开课马上开始了-欢迎大家一起讨论学习-第一系列读《Swift开发指南(修订版) 》看Swift视频教程

引用: 智捷课堂携手51CTO学院.图灵教育联合举办iOS线上培训就业班系列体验公开课. 分享移动开发.移动设计方向最新,最热,最抢眼技术热点以及设计经验.我们每周将最少举办一次公开课,同时会提前安排公开课进度.关于公开课内容,我们将选择时下热门技术与大家分享,同时我们也希望能与大家进行交流,并搜集大家想了解的热点与大家分享. 直播时间1月16日至2月10日,每周二.周四晚8:00-9:30. 直播方式Q%Q群直播亲们可以根据自己关注的热点,选择加入相应的Q#Q群: iOS技术直播Q%Q群: 3

快看Sample代码,速学Swift语言(2)-基础介绍 快看Sample代码,速学Swift语言(1)-语法速览

快看Sample代码,速学Swift语言(2)-基础介绍 Swift语言是一个新的编程语言,用于iOS, macOS, watchOS, 和 tvOS的开发,不过Swift很多部分内容,我们可以从C或者Objective-C的开发经验获得一种熟悉感.Swift提供很多基础类型,如Int,String,Double,Bool等类型,它和Objective-C的相关类型对应,不过他是值类型,而Objective-C的基础类型是引用类型,另外Swift还提供了几个集合类型,如Array, Set, 和

自己动手写处理器开篇介绍

将陆续上传本人写的新书<自己动手写处理器>(尚未出版),今天是开篇,我尽量每周四篇 内容简介 本书使用Verilog HDL设计实现了一款兼容MIPS32指令集架构的处理器--OpenMIPS.OpenMIPS处理器具有两个版本,分别是教学版和实践版.教学版的主要设想是尽量简单,处理器的运行情况比较理想化,与教科书相似,便于使用其进行教学.学术研究和讨论,也有助于学生理解课堂上讲授的知识.实践版的设计目标是能完成特定功能,发挥实际作用. 全书分为三部分.第一部分是理论篇,介绍了指令集架构.Ve

LinQ开篇介绍

语言集成查询(LINQ)是 Visual Studio2008中引入的一组功能.可为 C# 和 Visual Basic 语言语法提供强大的查询功能. LINQ引入了标准易学的数据查询和更新模式,可以扩展该方法来支持任何类型的数据存储. Visual Studio 包括 LINQ 提供程序集,后者支持将 LINQ 与.NET Framework 集合.SQL Server 数据库.ADO.NET 数据集和 XML 文档结合使用. 在LINQ查询中,可以使用相同的基本编码模式来查询和转换xml文档

jQuery EasyUI入门视频教程【20讲】

jQuery EasyUI入门视频教程[20讲] jQuery EasyUI是一组基于jQuery的UI插件集合,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面.非职业讲师孙宇讲授,全20讲.

Swift视频教程02 - HelloWorld、注释、分号

视频地址:http://pan.baidu.com/share/link?shareid=1804316695&uk=1041959753&fid=1016148860911336 Swift视频教程02 - HelloWorld.注释.分号

[Java聊天室服务器]实战之一 开篇介绍

前言 学习任何一个稍有难度的技术,要对其有充分理性的分析,之后果断做出决定---->也就是人们常说的"多谋善断":本系列虽然涉及的是socket相关的知识,但学习之前,更想和广大程序员分享的是一种心境:学习是一个循序渐进的过程,心态应该随时调节,保持戒骄戒躁的状态.比如最近在看网易公开课MIT<算法导论>,老师提到,学习算法之前要计算机数学+离散数学+概率论等课程的知识,所以一直学不好算法的程序员不妨从基础入手,这都是中国式教育惹的祸啊!(此处省略一万字......)

python学习第二讲,pythonIDE介绍以及配置使用

目录 python学习第二讲,pythonIDE介绍以及配置使用 一丶集成开发环境IDE简介,以及配置 1.简介 2.PyCharm 介绍 3.pycharm 的安装 二丶IDE 开发Python,以及配置IDE 1.初始化IDE 2.打开python项目. 3.pycharm设置python的默认解释器版本. 4.pycharm设置为所有用户可以使用,以及启动pycharm 5.设置pycharm启动图标(快捷方式) 6.卸载之前的pycharm python学习第二讲,pythonIDE介绍

Swift Playgrounds for mac基础知识介绍

Swift Playgrounds是一款适用于iPad和Mac的革命性应用程序,它使Swift学习变得互动而有趣.它不需要编码知识,因此非常适合刚开始的学生.使用Swift解决难题,以掌握基本知识.Swift是Apple创立的一种强大的编程语言,专业人士用来构建当今最受欢迎的应用程序.在本篇文章中,我们介绍的是Swift Playgrounds for mac基础知识. [dl]15-6298[/dl] 首先我们来认识一下基本的操作: 掌握基础知识,然后面对更多挑战.除了内置的课程库之外,Swi