swift写法与OC的区别

1、swift创建类时只有一个文件(.swift),oc创建类时有两个文件(分.h跟.m)

2、swift中的实现代码全部开始于class 类名 : 父类(UICollectionViewCell) {}之中,OC实现代码开始于@implementationMyViewController @end之间。

3、swift实现协议直接跟在父类后面用逗号区分多个协议,OC中实现协议用<UITableViewDataSource,UITableViewDelegate>,并且要写在.h文件中。

4、swift中用let来声明一个常量(let maxCount = @"hello"),用var来声明一个变量(var maxCount : Int = 0)这边可以不用声明类型 = 后面跟上的数据初始值则可以声明这个类型,如果要声明类型则在常量名后面加上:Int(NSString)来表示数据类型。OC中用Static来声明一个常量static int aa = 0,声明变量直接使用int aa = 0。区别:swift中变量描述多了var定义,并且将变量类型定义放在后面(可省略),OC中变量定义放在最前面(不可省略)。

5、swift跟OC都有Int、Float、Double、String、Bool数据类型。swift有三种集合类型Array(数组类型,数据类型顺序添加),Set(数组类型、不可添加相同类型数据),Dictionary(字典类型、键值对)。OC中有NSArray、NSMutableArray(数组类型,可变或者不可变),NSDictionary、NSMutableDictionary(字典类型,不可变或者可变类型),NSMutableString(可变字符串类型)。

6、swift中override func viewDidLoad() {}方法等同于OC中的- (void)viewDidLoad 方法,都可以始化控制器中的一些数据,添加子控件等。区别:swift中这个方法获取的frame并不一定准确,所以不建议在这个方法约束子控件,override func viewWillAppear(animated: Bool) {}我们可以在这个方法里面做一些子控件的约束操作等。

7、override修饰的方法名表示重写父类的方法、像override func viewDidLoad() {}就是重写了父类UIViewController的viewDidLoad方法。@final修饰的方法不能被子类重写。

8、元组的用法:元组很类似OC中的数组,区别是元组中可以添加对象、或者c语言的常用类型(Int)型例如:var userZhangsan = ("Zhangsan", "张三", "越秀区清水濠小学", 9, "三年级", true),取值可以userZhangsan[0]取到"Zhangsan",在设计元组时不止添加值还可以对每个值添加对应的名称例如:var userInfo = (name:"Bannings",true, age:22),调用比较方便可以直接使用userInfo.name来取值。元组可以用var来修饰表示可变的元组,用let修饰的是不可变元组。元组也可以看做一种数据结构,可以当做参数或者返回值使用。

9、方法使用:func 类名(参数)->返回值。

例1:func initCollectionView() ->Void表示无参数无返回值的方法 。

例2:func collectionView(_collectionView:UICollectionView, numberOfItemsInSection section:Int) ->Int表示传入UICollectionView和Int类型的参数,传出Int类型返回值。

10、基本运算符:swift中一元、二元、三元运算符、赋值运算符、逻辑运算符(|| && !)基本跟OC用法一致,算术运算符(+、-、* /、%)基本跟OC一致,不过两个字符串拼接可以用+直接完成。

组合赋值运算符:var a =1,a +=2这个跟OC一样也是变成a = a + 2;比较运算符也是跟OC一致返回一个bool类型的值。元组也可以进行比较不过两个元组必须是相同格式的,按照顺序逐个比较大小。

闭区间运算符跟半闭区间运算符:for index in 1...5{}闭区间运算符从1循环到5,第一个元素必须小于最后一个元素。fori in 0..<count{}半闭区间运算符跟闭区间运算符一样,只是不包括最后一个元素。这边方便用于列表长度遍历。

11、swift中用let修饰的字符串是常量字符串不可变,var修饰的字符串是可变字符串,可以直接用+对两个字符串进行拼接,可用for in来遍历字符串中的每个字符,String(array)来将数组的每个元素合成一个字符串,可以用 append()方法将一个字符附加到一个字符串变量的尾部,

插入:调用 insert(_:at:)方法可以在一个字符串的指定索引插入一个字符,调用 insert(contentsOf:at:)方法可以在一个字符串的指定索引插入一个段字符串。

删除:调用 remove(at:)方法可以在一个字符串的指定索引删除一个字符,调用 removeSubrange(_:)方法可以在一个字符串的指定索引删除一个子字符串。

12、集合类型:

数组(Arrays)

Arrays表示是一个可以添加无序数据的集合,同样的Arrays也适合string一套的数据存储跟删除机制(insert(_:at:),remove(at:))。可以使用 enumerated()方法来进行数组遍历。enumerated()返回一个由每一个数据项索引值和数据值组成的元组。我们可以把这个元组分解成临时常量或者变量来进行遍历

集合(Sets)

集合(Set)用来存储相同类型并且没有确定顺序的值。当集合元素顺序不重要时或者希望确保每个元素只出现一次时可以使用集合而不是数组。创建一个空的var letters =Set<Character>(),使用 contains(_:)方法去检查 Set中是否包含一个特定的值,可以在一个 for-in循环中遍历一个 Set中的所有值for genre in favoriteGenres {print("\(genre)")}

1、使用 intersection(_:)方法根据两个集合中都包含的值创建的一个新的集合。

2、使用 symmetricDifference(_:)方法根据在一个集合中但不在两个集合中的值创建一个新的集合。

3、使用 union(_:)方法根据两个集合的值创建一个新的集合。

4、使用 subtracting(_:)方法根据不在该集合中的值创建一个新的集合

字典(Dictionary)

初始化var airports: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin"],字典可以用airports["DUB"]下标来获取到对应的value值,我们可以使用 for-in循环来遍历某个字典中的键值对。每一个字典中的数据项都以 (key, value)元组形式返回,并且我们可以使用临时常量或者变量来分解这些元组:

for (airportCode, airportName) in airports {

    print("\(airportCode): \(airportName)")

}

通过访问 keys或者 values属性,我们也可以遍历字典的键数组或者值数组。

13、控制流for in

正常for name in names {print("Hello, \(name)!")}遍历一个数组如果需要使用到数组中的元素可以定义个name临时变量来获取到对应的数据,如果不使用则用_代替name。

stride(from:0 to:60 by:3)可以跳过某个区间值,这个例子表示从0开始遍历 总共遍历到60,遍历一次跳过三个变成0,3,6...

判断if语句类似OC用法 if (跟上一个bool类型的数据){},在swift中Switch不仅仅可以用来判断整形类型,还可以用来判断Character字符类型(或者case"a","A":复合类型判断),还可以判断cash是否在一个区间内。

14、枚举enum

令枚举遵循 CaseIterable协议。Swift 会生成一个 allCases属性,用于表示一个包含枚举所有成员的集合

enum Beverage:CaseIterable{casecoffee,tea,juice}

let numberOfChoices = Beverage.allCases.count

枚举还可以定义一个元组的case类型

enum Barcode{

case upc(Int,Int,Int,Int)

case qrCode(String)

}

15、类和结构体:结构体和类有着相似的定义方式。你通过 struct关键字引入结构体,通过 class关键字引入类,并将它们的具体定义放在一对大括号中

struct SomeStructure{

// 在这里定义结构体

}

class SomeClass{

// 在这里定义类

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,492评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,048评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,927评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,293评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,309评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,024评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,638评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,546评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,073评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,188评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,321评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,998评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,678评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,186评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,303评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,663评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,330评论 2 358

推荐阅读更多精彩内容