Swift基本语法以及与OC的比较

一、注释:

1、单行注释和OC一致。

2、块注释中有与OC不同点:可以嵌套注释

二、常量和变量:

1.常量:初始化后可读不可写 let

2.变量:初始化后可读可写 var

 1 //不需要指定类型,系统会自动判断。
 2 let teacherName = "虎哥";//自动判断为字符串,句尾分号可写可不写
 3 let teacherName1 = 25;//自动判断为数字
 4 let teacherAge = 26
 5 //变量:初始化之后变量  (可读可写) 
 6 var teacherName2 = "虎哥";
 7 
 8 teacherName2 = "虎哥最帅"
 9 //teacherName2 = 25//编译失败---只能在同类型间赋值(初始化之后类型就已经固定)
10 
11 //print(teacherName2);
 1 //2.用  +  合并string , + 号前后类型需要一致
 2 
 3 var hu = huName + String (huAge)
 4 
 5 
 6 //print(hu);
 7 
 8 
 9 //3.占位符 OC:%@,%d...   S: \(xxx)
10 
11 let  huInfo2 = "虎哥\(huAge)岁"// = [NSString stringWithFormat@"虎哥%ld岁",huAge]
12 
13 
14 //print(teacherInfo2)
15 
16 //4.指定类型,类型不会乱 .UInt 修饰的数据不能为负   ,int整数可以为负 //常量、变量名可以中文或者图标
17 
18 var nameLength :UInt = 7
19 
20 var string :String = "hello swift"
  1 //5.数值型字面量
  2 //十进制
  3 let tenValue = 26
  4 //二进制
  5 
  6 let twoValue = 0b11010
  7 
  8 //八进制
  9 
 10 let eightValue = 0o32
 11 //十六进制
 12 
 13 let sixteenValue = 0x1A
 14 
 15 //print(tenValue,twoValue,eightValue,sixteenValue)
 16 
 17 
 18 //6.类型别名,类似OC中的tyPeDef
 19 
 20 typealias tongType = Int;//把 int --> tongType
 21 
 22 var tongAge1 : tongType = 26 //  var tongAge1:Int = 26
 23 
 24 //7.bool值 OC:BOOL :YES/NO 0为NO,非零即为真  ---- Swift:Bool :true / false 没有0或非零概念
 25 
 26 
 27 var boolVaue = true
 28 
 29 //8.元组 ,swift新类型 。把多个值绑定的复合值。元组中的值类型可以任意,不要求一致
 30 
 31 var yuanzu:(Int ,String) = (100,"hello")
 32 
 33 //访问元组中的值(类似OC类对象点相应属性)
 34 //print(yuanzu.0)
 35 
 36 //9.可选类型。swift新类型。1.如果这个类型有值,就是该值   2.如果没有值  ,这个值就是nil
 37 
 38 //optionStr代表两种情况:1.?号后有值 等于把后值赋给optionStr   2.?后没有值,optionStr = nil 【作用:保护有些值缺失情况】
 39 
 40 
 41 var optionStr :String? = "hello world"
 42 //var optionStr :String?
 43 
 44 //访问可选类型。需要   拆包(强制解析),不能直接访问
 45 //注意,强制类型之前,一定要确保可选类有值
 46 
 47 //print(optionStr!)
 48 
 49 
 50 
 51 //10.断言。首先有一个条件,如果条件成立,代码继续运行,否则,代码执行结束
 52 
 53 var age = 10
 54 //var age = -10
 55 assert(age > 0,"年龄不可能为负")//用于调制程序
 56 
 57 
 58 
 59 //-------三、运算符 ----
 60 //1.一元运算符 :只需要一个变量即可完成的操作
 61 // (1) ‘++‘ 、 ’!‘ 、’ -‘
 62 
 63 var fuhaoNumber = -10;
 64 
 65 var fuhaoNuner2 = -fuhaoNumber;
 66 //print(fuhaoNumber,-fuhaoNumber);
 67 
 68 //(2).
 69 
 70 var addNumer = 88;
 71 
 72 var addnumer2 = addNumer++;
 73 
 74 var addnumer3 = addNumer--;
 75 
 76 //print(addnumer2,addnumer3)
 77 
 78 
 79 //2.二元运算符 需要两个变量即可完成的操作
 80 //数字的计算和C是一样的。可以用 + 拼接字符串
 81 
 82 //print("hello" + "swfit")
 83 
 84 
 85 //3.符合运算符 += ...
 86 
 87 var a = 1;
 88 a += 2
 89 
 90 //print("a等于\(a)")
 91 
 92 
 93 //4.swift 新增: 区间运算符 (只有两种情况)
 94 
 95 //1...5闭区间运算符,代表[1,5],包含1和5
 96 for tempNUmber in 1...5{
 97     //遍历 1 -- 5
 98     //    print(tempNUmber)
 99 }
100 
101 //
102 //for tempNumber2 in 1..<5{//[1,5)
103 //
104 //    print(tempNumber2)
105 //
106 //}
107 
108 
109 //5.空盒运算符(??)注意:空盒运算符,前后类型一致
110 //适用范围:
111 //主要结合可选类型使用   。如果是非可选,那么空盒运算符后边的语句就短路掉了
112 
113 //空盒运算符,会先判断前边的可选类型有没有值,如果为空。就会返回后边的值。反之,就会对类型进项强制解析,取出可选类型的值
114 
115 
116 
117 //var kongheyuansuanfu :Int?
118 var kongheyuansuanfu :Int?  = 78
119 var kongheValue = kongheyuansuanfu ?? 27
120 
121 //print(kongheValue)
122 
123 
124 
125 //---四。字符串 和字符
126 
127 //NSString /NSMutableString
128 
129 //let / var
130 
131 //1.创建字符串 带默认值
132 
133 var stringValue = "class39"
134 
135 stringValue = "NBClass 39"
136 
137 //创建空字符串
138 
139 var stringValue1 = ""
140 
141 var stringValue2 = String()//推荐使用
142 
143 //判断字符串是否为空
144 
145 //if stringValue2.isEmpty {
146 ////    print("isEmpty");
147 //
148 //}
149 
150 
151 
152 //2.说明字符串是值类型  string 1 和string 2 分为存储在不同地址 同OC
153 
154 
155 var string1 = "class39"
156 var string2 = string1;
157 
158 string1 = "NB"
159 
160 //print(string1);
161 //print(string2)
162 
163 
164 //OC  字符串调用
165 var OCstring1 = NSMutableString(string: "tongli");
166 
167 var OCstring2 = OCstring1;
168 
169 //OCstring1.appendString("hahha")
170 
171 //print(OCstring1,OCstring2);
172 
173 //但是如果把不可变字符串变换为可变,发生不同情况
174 /*
175 NSMutableString *str1 = [NSMutableString stringWithString:@"123"];
176 
177 NSString *str2 = str1;
178 
179 [str1 appendString:@"123"];
180 
181 NSLog(@"str1 -- %@",str1);
182 NSLog(@"str2 -- %@",str2);
183 
184 */
185 
186 
187 
188 //3.字符串的长度
189 
190 //字符   characters  ,
191 //
192 //var stringLength = "hello"
193 //
194 //stringLength.characters
195 //
196 //
197 //var str111 = "dog is ????"
198 //for  tempchar in str111.characters {
199 //
200 ////    print(tempchar)
201 //}
202 //
203 ////长度:先分解成字符,再统计多少个
204 ////print("长度是\(str111.characters.count)")
205 //
206 //
207 ////4.字符串的拼接(两种方法) ,
208 ////(1)     + 号拼接
209 //
210 //var addStr = "hello" + " world"
211 ////
212 ////print(addStr)
213 //
214 ////(2)   占位符
215 //var addStr2  = "addString \(addStr)"
216 
217 //print(addStr2)
218 
219 
220 //5.字符串的插入     注意区别字符串的拼接
221 
222 var string111 = "hello"
223 var string112 = "hello"
224 //string111.insert("1", atIndex:string111.startIndex/*string111.endIndex*/)
225 
226 //string111.insert("!", atIndex:string111.startIndex.advancedBy(2))//advance : 前进
227 
228 //string111.insert("!", atIndex:string111.endIndex.advancedBy(-2))//advance : 前进
229 
230 //插入字符串
231 
232 //string111.insertContentsOf(" world".characters, at: string111.endIndex)
233 
234 let index = string111.endIndex.advancedBy(-2).predecessor()//predecessor:前任
235 let index2 = string111.endIndex.advancedBy(-2)
236 string111.insertContentsOf(" world".characters, at: index)
237 string112.insertContentsOf(" world".characters, at: index2)
238 //print(string111)
239 //print(string112)
240 //---------
241 
242 
243 //6.字符串的删除(截取)
244 
245 //1.   string  -->  NString,通过OC方法操作字符串
246 
247 var baseStr :NSString = "123456789"
248 
249 //let indexStr1 = baseStr.substringFromIndex(2)
250 
251 //let indexStr1 = baseStr.substringToIndex(2)
252 
253 let indexStr1 = baseStr.substringWithRange(NSMakeRange(2, 4))
254 
255 //print(indexStr1)
256 
257 
258 
259 //直接操作 ..........................................................................
260 
261 var baseStr2 = "123456789"
262 
263 let range = baseStr2.endIndex.advancedBy(-5) ..< baseStr2.endIndex
264 
265 baseStr2.removeRange(range)
266 
267 //print(baseStr2)
268 
269 //7.    字符串的比较 A == B   // 必须是string类型   区别NSString
270 
271 var  compareStr1 = "万万没想到"
272 var  compareStr2 = "十万个冷笑话"
273 
274 if compareStr1 == compareStr2 {
275     
276 //    print("true")
277     
278 }else{
279     
280 //    print("false")
281 }
282 
283 //注意:当swift完不成需求时,可以转化为OC,再进行操作
284 
285 
286 //-------------------------------------五、集合性(collection)类型 ----------------------------
287 
288 //-------------------------------------------A/数组     var:可变  let :不可变
289 
290 
291 //1.创建数组
292 
293 //(1)空数组
294 var emptyArr = [Int]()//代表数组只能存放int类型
295 
296 //添加元素
297 emptyArr.append(3)
298 emptyArr.append(4)
299 //print(emptyArr)
300 
301 
302 
303 //创建一个带有默认值的数组
304 
305 var arr:[String] = ["apple","MiNi","HUAWEI","oppo"]
306 
307 
308 
309 //二、对数组编辑
310 //增
311 //1.arr.append(<#T##newElement: Element##Element#>)
312 
313 //2.插入
314 arr.insert("vivo", atIndex: 1)
315 
316 //3.合并 (两个以上数组合并)
317 
318 arr += ["SAMSUNG","Nokia"]
319 
320 
321 //删除 remove
322 
323 arr.removeAtIndex(4)
324 
325 //修改  与OC类似,也是通过下标修改
326 
327 //修改一个元素
328 arr[0] = "a pple"
329 
330 //修改多个元素
331 
332 arr[0...2] = ["MIUI" , "iOS" ,"Swift"]
333 
334 
335 //数组的遍历//不用指定类型
336 for temp in arr {
337 
338 
339 }
340 
341 //得到元素在数组中下标    index--下标 value -- 值(数组元素)  其中enumerate()返回值是一个数组,这个数组每个人元素是元组 ,这个元组包含的是下标和数组元素值
342 
343 for (index,value) in arr.enumerate() {
344 
345 //    print("index -- \(index)----Value -- \(value)")
346 
347 }
348 
349 
350 
351 //判断数组是否为空
352 
353 if arr.isEmpty {
354 //    
355 //    print("this arrary is empty")
356 //}else{
357 //    
358 //    print("this arrary is not empty  \(arr) \n \(arr[0])")
359     
360 }
361 
362 
363 //-------------------------------------------------字典 -----------------
364 
365 //1.创建字典,创建一个空的字典  []中式键值对得类型
366 
367 var emptyDic = [Int : String]()
368 
369 //字典的设置和访问
370 
371 emptyDic[1] = "iPone_1"
372 emptyDic[2] = "iPone_2"
373 //print(emptyDic[1])
374 //print(emptyDic[2])
375 
376 //2.创建字典,带有默认值
377 
378 var cityDic : [String : String] = ["中国":"北京","美国":"华盛顿","日本":"东京","马尔代夫":"马累"]
379 
380 
381 //3.判断字段是否为空
382 
383 if cityDic.isEmpty {
384 }
385 
386 //4.增
387 //通过键值去增加
388 cityDic["韩国"] = "首尔"
389 cityDic["法国"] = "巴黎"
390 
391 
392 //5.删除
393 //通过键删除
394 
395 cityDic.removeValueForKey("日本")
396 
397 
398 //6.修改
399 
400 //方法一:通过键修改和添加一样。
401 //如果字典中不存在该键,则为添加。否则为修改
402 
403 cityDic["韩国"] = "汉城"
404 
405 //方法二:
406 cityDic.updateValue("普罗旺斯", forKey: "法国")
407 
408 
409 //7.遍历
410 
411 //for in 中间写键值对
412 /*
413 for (key,value) in cityDic {
414 
415 //print("key -- \(key)  ++  value --- \(value)")
416 
417 }
418 */
419 //也可以只遍历key或者value
420 /*
421 for tempKey in cityDic.keys {
422 
423 //    print("\(tempKey)")
424 }
425 */
426 
427 
428 //for tempValue in cityDic.values {
429 //
430 //print(tempValue)
431 //}
432 
433 
434 //print(cityDic)
435 
436 
437 
438 
439 //-------------------------------------集合-----------------------------------
440 //1.无序性  2.互异性
441 
442 //1.创建一个集合 
443 //空
444 var emptySet = Set<String>()
445 
446 
447 //有默认值
448 
449 var defaultSet : Set<String> = ["法拉利","兰博基尼","宝马","吉普","布加迪"]
450 
451 
452 //2.增加
453 defaultSet.insert("劳斯莱斯")
454 
455 
456 //3. 删除
457 //直接删除这个元素
458 
459 defaultSet.remove("法拉利")
460 
461 //4.包含
462 
463 //if defaultSet.contains("吉普") {
464 //print("我有这个车")
465 //}
466 
467 //5.遍历
468 
469 //for tempCar in defaultSet {
470 //
471 //    print("我有一辆车,叫\(tempCar)")
472 //
473 //}
474 
475 
476 
477 //6集合的特殊运算
478 
479 var set1 : Set<String> = ["1","2","3"];
480 
481 var set2 : Set<String> = ["1","2","4"];
482 
483 //-1-找到两个集合间相同的元素  集合交集
484 
485 var result1 : Set<String> = set1.intersect(set2)
486 
487 //-2-找到交集之外的元素
488 
489 var result2 :Set<String> = set1.exclusiveOr(set2)
490 
491 //-3- 合并 并集
492 
493 var result3 :Set <String> = set1.union(set2)
494 
495 //-4- 集合的补集
496 
497 var result4 :Set<String> = set1.subtract(set2)//set1 - set2
498 
499 print(result4)
500 
501 print(defaultSet)