最近随着苹果的春季发布会到来,iOS9.3系统的更新,Swift2.2的更新也随之到来,Swift自发行以来,就伴随着很多评价,简介,方便开发,完全免费,开源,综合C,OC,Java等多门语言的优劣筛选产生的一门计算机语言。
如今Swift语言从发行至今也有近两年时间,在两年里也在不断的完善,更新,而且当下也有不少软件是通过纯Swift语言来编写的,而且他有一个很大的好处就是开源,对于程序员来说这个好处绝对是最有诱惑力的,为什么git能有这么多程序员的支持,就是因为他给了一个代码平台,让大家的代码开源从别人那里学到知识。同时它既严谨又开放,有自己的原则,同时使用起来也非常的灵活。
在这里我也是分享一下最近接触并学习Swift语言的一些知识。
首先说下Swift和OC的区别,在工程上OC是分为.h和.m文件的,一个声明文件,一个实现文件,而在Swift工程中只有一个文件,就是.Swift文件,声明,导入文件都在这一个文件夹里来操作的。导入 不需要再到类名 所有类名都是公开的 可以直接访问到
导入框架: 直接导入框架名 如 import UIKit
OC程序入口是main函数
swift代码是从上往下执行 @UIApplicationMain 程序的入口
class 是用来声明类的 class后面是类名 冒号后面是继承的父类
导入协议或者代理的时候直接在父类的后面加逗号和代理或协议的名字。
例如
class AppDelegate: UIResponder, UIApplicationDelegate{
}
另外如果我们要声明一个变量,在OC里面都是类名 对象名,然后进行复制,在Swift中所有的变量都用var来定义,所有的常量都用let定义,公式为
var 名字 :数据类型 =值
值得一提的是,Swift中是支持中文编码格式的,甚至你还可以把对象名命名为表情,比如
let 🐶:String = "hello world"
print(🐶 + "可以和海绵宝宝做朋友吗")
//Swift中可以直接用+来拼接字符串
这就是说为什么这门语言很开放,但是我们如果这样写
let 🐶:NSString = "hello world"
print(🐶 + "可以和海绵宝宝做朋友吗")
他就会说,🐶的类型和"内容"类型不同,不能进行拼接,你必须把它转化成String类型才能进行拼接,在Swift中类型一定要精确,否则他就会提示报错,而且,写法一定要正规,多一个空格少一个空格他都会给你莫名的报错。
另外在Swift中一段代码的结束可以不用;结尾,但是一行如果有多句代码要用;来隔开,其实加上也是不会报错的。
还有一点Swift因为现在还不算太完善,如果你在声明一个变量的时候,在后面并没有改变他的值,他会提醒你,你可以赋值为常量,但是不要管他,也不会有错误的。
在Swift中还有一点很神奇的地方就是,它可以自行推断数据类型,这在其他所有语言中都是有违背常理的,一个数据的产生必定要随之伴随着他的类型,但是在Swift中它却可以自行推断数据类型来进行判断,因为在Swift中加入了几种新的判断,例如可选数据类型,明确数据类型,判断数据类型,就是说你在定义一个数据的时候他还没有明确的去使用,也可以选择它的数据类型,所以在这点Swift还是很严谨的
let 字符串 = "我是字符串"
print(字符串)
let 年龄 = 12
print(年龄)
我们可以这样证实一下是不是确实可以自行推断数据类型
如果声明变量的时候不想在声明的时候去赋值 必须填上变量的数据类型 什么都没给他 没有推断的依据 推断不出
然后我们说一下Swift中方法的声明和调用
就拿一个APPDelegate里面函数来说明吧
swift:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
return true
}
OC:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
return YES;
}
比较一下Swift里面声明都是用func来声明,后面是方法名,接着是一个小括号,无参数就不填内容,有参数就填写参数类型,顺带提一下Swift里面打mark标记也不同,直接使用//MARK:标题内容来标记,有一点,在Swift中是没有BOOL类型的,他是纯粹的Bool类型,既,是或者非,没有1,0,YES NO这一说,所以return得都是true或者false
func 方法名 (){
print("无返回值不带餐的函数")
}
//MARK:无返回值 代餐
func 有参方法(参数名:NSString) {
print("你好,我是有残方法")
}
//MARK:带参有返回值
func 有参有返回方法(参数名1:String , 参数名2:String) -> String {
return 参数名1 + 参数名2
}
无视那些卖萌的错别字=。=虽然可以用汉语,但是并不提倡这一点,大家定义的时候尽量还是用英文命名。。逼格也高一些。。
然后在程序中调用一下,调用的时候直接是方法名(参数)
var 参数:NSString = "🐶"
有参方法(参数)
print(有参有返回方法("123", 参数名2:"12344" ))
要注意的是如果你要调用其他类的方法的时候要用.来调用,比如我创建一个UIView的类,在里面写了个叫视图方法的方法,需要传一个字符串的参数进去,那么我调用的时候。
//快捷创建对象
// 创建带有frame的
// let view:MyView = MyView(frame:CGRectMake(123,123,123,123))
let view:MyView = MyView()
view.frame = CGRectMake(123, 123, 123, 123);
view.backgroundColor = UIColor .redColor()
print(view .视图方法("字符串参数"))
self.view .addSubview(view)
还有一点,在Swift中是提倡使用区间来定义范围的,在Swift中有全闭合区间,和半闭合区间之分,全闭合即包括区间内所有元素,半闭合区间是由第一个元素到倒数第二个元素。定义的方式也不同
1 2 3 4 5
全闭合区间 1...5//三个点
1 2 3 4 (5)
半闭合区间 1..5//两个点
在Swift中是提倡使用区间来定义的
let titles = ["标题1" , "标题2" , "标题3"]
for (var i = 0;i < titles.cout; i += 1){
vc.title = titles[i]
}
还有一点,Xode7.3之后 ++将在swift3中弃用 改成+=
在做数据类型转换的时候
swift 不同的数据类型 不允许计算
数据类型转换 数据类型(要转换的变量名)
在遍历的时候大家注意,这点我在学习的时候差点报警,在判断的时候,比如i < 5,如果i和<中间有空格,则右侧也要有空格,如果没有,就都不要有,不然就会报错,写法一定要严谨,最好都加上空格,看起来也清晰,另外for循环的条件可以不用加括号,当然加上也没有错误,这点我当时真的是要报警了
暂时先写这么多,前面网站里面都会有相应的视频,老师也都很不错。在这里主要写一些容易遇到的错误等,有空再来写一下选择类型。