iOS中 Swift初级入门学习(一)

简介:
[plain]  view plain  copy
  1. /  
  2. //  Copyright (c) 2015年 韩俊强. All rights reserved.  
  3. //  
  4.   
  5. import Foundation  
  6. // Swift当中的输出函数  
  7. // println Swift2.0 之前使用的输出函数, 可以自动换行  
  8. // print Swift2.0之前自动换行, Swift2.0之后可以自动换行  
  9. println("Hello, World!")  
  10.   
  11. // 单行注释和以前一样  
  12. // 块注释  
  13. /*  
  14.   
  15.       块注释  
  16.     /*  
  17.   
  18.      可以嵌套注释  
  19.   
  20.     */  
  21.   
  22. */  
  23.   
  24.   
  25. /*  
  26.   
  27.   
  28. // 如何声明一个常量 规则: let 常量名: 类型 = 值  
  29. // Swift当中我们不必再代码语句的结尾处加分号, 但是如果一行中写了几句代码, 那么代码之间就要用分号隔开  
  30. let a: Int = 5;    let b: Int = 10  
  31.   
  32. // 如何声明一个变量 var 变量名: 类型 = 值  
  33. // Character 字符型  
  34. var c: Character = "a"  
  35. println(c)  
  36.   
  37. // 常量的值不可以发生改变, 变量的值可以改变  
  38. // a = 10 错误  
  39. c = "b"  
  40.   
  41. // 命名规则  
  42. // 我们可以使用大部分的特殊符号, 中文也可以, 数字, 字母, 下划线, 但是非法的Unicode编码, 数字符号, 标志符是不可以的  
  43. let 小韩哥: String = "好帅"  
  44. <pre name="code" class="plain">// 类型推断  
  45. // Swift 会根据我们给常量或者变量赋的值来推断我们常量或者变量的类型  
  46. let 常量 = 10  // 根据推断: 常量是int类型  
  47.   
  48. var 变量 = 20 // 变量是一个int 类型  
  49.   
  50. // Swift是一门类型安全的语言, 我们不能给一个类型的变量赋给另一个类型  
  51. // 变量 = 19.5 错误  
  52.   
  53. 变量 = 30  
  54.   
  55. println(变量)  
  56.   
  57. // 数值字面量  
  58. // 20, 10 , 字符串  
  59. // 0b  
  60. //let ab = 1011  
  61. //println(ab)  
  62. let ab = 0b1010  
  63. println(ab)  
  64.   
  65. // 八进制值字面量  
  66. let ac = 0o17  
  67. println(ac)  
  68.   
  69. // 十进制字面量, 默认的数组就是十进制  
  70. let ad = 18  
  71.   
  72. // 十六进制字面量 0x 开头  
  73. let ae = 0xabc  
  74. println(ae)  
  75.   
  76. // 字符串插值  
  77. // Swift当中没有占位符, 我们可以以字符串插值的形式当做占位符 \(), 括号中存放常量或者变量的名字  
  78. let af = "hello,wold"  
  79. println("af = \(af)")  
  80.   
  81. // 类型转换  
  82. let 浮点型: Float = 15.9  
  83. let 整型: Int = 20  
  84. // 不同类型不可以直接做运算  
  85. // 浮点型转化成Int类型 Int()  
  86. //  Int类型转化为浮点型  Float()  
  87. let result = Int(浮点型) + 整型  
  88.   
  89. // 打印最大值, 最小值  
  90. println(Int8.max)  
  91. println(Int16.min)  
  92.   
  93. println(UInt8.max)  
  94. println(UInt8.min)  
  95.   
  96.   
  97. // 类型别名的使用  
  98. typealias newInt32 = Int32;  
  99. println(newInt32.max)  
  100.   
  101. // 布尔值 只有true false  
  102. var 布尔值 = true  
  103. println(布尔值)  
  104. 布尔值 = false  
  105. println(布尔值)  
  106.   
  107. // 元组  
  108. // 多个不同类型的值组合成的一个复合值  
  109. let 元组 = ("小明",28,95.5);  
  110.   
  111. // 取出元组里面的值  
  112. // 通过元组名. 下标的形式取出元组的内容  
  113. println(元组.0)  
  114. println(元组.2)  
  115.   
  116. // 如果我们声明元组的时候,给元组里面的内容前加一个名字, 那么我们就可以通过 元组名.元素名字 的方式取出元组里面的内容  
  117. let 小韩 = (身高: 170,年龄:25 )  
  118. println(小韩.身高,小韩.年龄)  
  119.   
  120. // 元组的分解  
  121. let (身高,年龄) = 小韩  
  122. println(身高,年龄)  
  123.   
  124. // 可选类型  
  125. // 可选类型是用来处理值缺失的情况, 一个变量声明成可选类型的话, 证明这个变量可能有值,也可能未空  
  126.   
  127. // 声明一个可选类型  
  128. var str: String?  
  129. println(str)  
  130. str = "hello,good morning"  
  131. println(str)  
  132.   
  133. // 我们要使用可选类型变量值的话,需要把可选类型里面的值解析出来, 方式:变量名 + ! ,这种方式叫做强制解析  
  134.   
  135. var aStr = "95588"  
  136. var aIntofOptinal = aStr.toInt()  
  137. println(aIntofOptinal)  
  138. // 强制解析之前我们要确保变量有值, 如果没有值, 我们不能在可选类型后面 + !来强制解析  
  139. var result1 = aIntofOptinal! + 10  
  140. println(result1)  
  141.   
  142. // 隐式解析类型  
  143. // 为了我们使用可选类型的时候, 不用发每次都用强制解析的方式取值, 我们可以在声明变量的时候在类型标注后面不用? 而用!的形式  
  144.   
  145. // for example  
  146. var 隐式解析类型: Int!  
  147. println(隐式解析类型)  
  148.   
  149. 隐式解析类型 = 20;  
  150. println(隐式解析类型)  
  151.   
  152. // 断言  
  153. // 起到断点调试的作用  
  154. var bStr: String?  
  155. bStr = "忘赋值了"  
  156. assert(bStr != nil, "字符串不为空")  
  157. println(bStr!)  
  158.   
  159.   
  160. */  
  161.   
  162. /*  
  163. // 运算符  
  164. // 根据操作数的不同, 运算符可以分为一元, 二元, 三元运算符  
  165. // + - *  /  %  
  166. // +   
  167. let a = 3; let b = 5  
  168. var c = a + b  
  169. println("c = \(c)")  
  170.   
  171. // -   
  172. c = b - a  
  173. println(c)  
  174.   
  175. // *  
  176. c = a * b  
  177. println("c = \(c)")  
  178.   
  179. // /  
  180. c = b / a  
  181. println("c = \(c)")  
  182.   
  183. // %  
  184. c = a % b  
  185. println("c = \(c)")  
  186.   
  187. // 自增, 自减运算  
  188. // ++  
  189. var aNumber = 10  
  190. // ++ 在前取新值, ++ 在后取旧址 , 不管++在变量的前面, 还是在变量的后面, 该变量都会自增1  
  191. let result = ++aNumber + aNumber++ + ++aNumber  
  192. println("result = \(result)")  
  193. println(aNumber++)  
  194.   
  195. // --  
  196. let result2 = --aNumber - aNumber-- + --aNumber  
  197. println(--aNumber)  
  198. println(result2)  
  199.   
  200. // 复合运算符  
  201. // +=   -=    /=     %=  
  202. // +=  
  203. var 变量 = 10  
  204. 变量 += 5 // 变量 = 变量 + 5  
  205. println(变量)  
  206.   
  207. // -=  
  208. 变量 -= 5  
  209. println(变量)  
  210.   
  211. //  /=  
  212. 变量 /= 2  
  213. println(变量)  
  214.   
  215. // %=  
  216. 变量 %= 1  
  217. println(变量)  
  218.   
  219. // 三目运算符  条件 ? 值1 : 值2 条件为真的时候取值1, 条件为假的时候取值2  
  220. let maxNumber = 5; let minNumber = 3  
  221. let result3 = maxNumber > minNumber ? maxNumber : minNumber  
  222. println(result3)  
  223.   
  224. // 比较运算符 >, < , <= , >= ,== , !=  
  225. if maxNumber > minNumber {  
  226.     println( "\(maxNumber) 比 \(minNumber) 大")  
  227. }  
  228.   
  229. if maxNumber < minNumber {  
  230.     println("\(maxNumber) 比 \(minNumber) 小")  
  231. }  
  232.   
  233. if maxNumber <= minNumber {  
  234.     println("\(maxNumber) 不比 \(minNumber) 大")  
  235. }  
  236.   
  237. if maxNumber >= minNumber {  
  238.     println("\(maxNumber) 不比 \(minNumber) 小")  
  239. }  
  240.   
  241. if maxNumber != minNumber {  
  242.     println("\(maxNumber) 不等于 \(minNumber) ")  
  243. }  
  244.   
  245. if maxNumber == minNumber {  
  246.     println("\(maxNumber) 等于 \(minNumber)")  
  247. }  
  248.   
  249. // 逻辑运算符, 逻辑与 &&, 逻辑或 || , 逻辑非 !  
  250. // 注意  逻辑与 逻辑或 的短路现象  
  251. // 逻辑与 运算符前面条件为假, 运算符后面的语句就不走(一假即真)  
  252. // 逻辑或 运算符前面条件为真, 运算符后面的语句就不走(一真即真)  
  253. // 逻辑非 取反  
  254.   
  255. var num = 10  
  256. if num++ == 10 || num-- > 0 {  
  257.     println(num)  
  258. }  
  259.   
  260. // 空合运算符 ??   
  261. var str = "123"  
  262. var num3 = str.toInt()  
  263. // 判断一个可选类型, 如果为空,就给一个常量赋值 567, 如果不为空, 就取这个可选类型变量解析出来的值  
  264. // 等价于  
  265. if num3 == nil {  
  266.     let result = 567  
  267.     println(result)  
  268. } else {  
  269.     let result = num3!  
  270.     println(result)  
  271. }  
  272.   
  273. // 等价于  
  274. let result4 = num3 == nil ? 567 : num3!  
  275. println(result4)  
  276.   
  277. let result5 = num3 ?? 567  
  278. println(result5)  
  279.   
  280. // 区间运算符  
  281. // (a...b) 包含 a 到 b 范围内的数, 且包含 a 和 b  
  282. // (a..<b) 包含 a 到 b 范围的数, 包含 a  不包含 b  
  283. for 数字 in (1...9) {  
  284.     println(数字)  
  285. }  
  286.   
  287. for number in (1..<9) {  
  288.     println(number)  
  289. }  
  290.   
  291. */  
  292.   
  293. // 字符串  
  294. // 在Swift当中没有可变字符串与不可变字符串之分, 字符串的可变与不可变只有我们用let. 还是var 来修饰有关, 如果let修饰,那么字符串不可变, var 修饰,这个字符串就可变  
  295.   
  296. var str = "hello,word"  
  297. // 遍历字符串中的每个字符  
  298. for 字符 in str {  
  299.     println(字符)  
  300. }  
  301.   
  302. // 字符串的拼接, 我们可以直接通过运算拼接字符串  
  303. str += " = 你好世界!"  
  304. println(str)  
  305.   
  306. // 这种方式只能拼接一个字符, 并且字符的位置在字符串的最后  
  307. let charactor : Character = "啊"  
  308. str.append(charactor)  
  309. println(str)  
  310.   
  311. // 判断字符串是否有前后缀  
  312. let aStr = "meinv.png"  
  313. if aStr.hasPrefix("meinv") {  
  314.     println("有前缀meinv")  
  315. }else{  
  316.     println("没有前缀")  
  317. }  
  318. // 判断字符串是否有后缀  
  319. if aStr.hasSuffix(".png") {  
  320.     println("png格式")  
  321. }else{  
  322.     println("其他格式")  
  323. }  
  324.   
  325. // 判断字符串是否为空  
  326. if aStr.isEmpty {  
  327.     println("字符串为空")  
  328. }else{  
  329.     println("字符串不为空")  
  330. }  
  331. // 全部大写  
  332. let resultOfStr = aStr.uppercaseString  
  333. println(resultOfStr)  
  334. // 全部小写  
  335. let resultOfStr1 = aStr.lowercaseString  
  336. println(resultOfStr1)  
  337. // 首字母大写  
  338. let resultOfStr2 = aStr.capitalizedString  
  339. println(resultOfStr2)  
  340.   
  341. // OC里面的字符串  
  342. let bStr : NSString = "hello"  
  343. let resultOfStr3 = bStr.length  
  344. println(resultOfStr3)  
  345.   
  346. // 数组  
  347. // 通过构造方法来创建一个空数组  
  348. var array : Array<String> = Array()  
  349.   
  350. // 第二种  
  351. var array1 = [Int]()  
  352. // 第三种  
  353. var array2 : [String] = Array()  
  354.   
  355. // OC里面创建数组  
  356. var array3 = NSArray()  
  357.   
  358. var arrayOfBook = ["金瓶梅","玉女心经","玉蒲团","一路向西"]  
  359.   
  360. // 修改数组中的元素  
  361. arrayOfBook[3] = "西游记"  
  362.   
  363. for element in arrayOfBook {  
  364.      println(element)  
  365. }  
  366.   
  367. // 另一种方式  
  368. for (index,value) in enumerate(arrayOfBook){  
  369.       
  370.     println((index,value))  
  371.       
  372. }  
  373.   
  374. // Swift2.0之后写法 点语法  
  375. //for (不知道,不知道2) in arrayOfBook.enumerate{  
  376. //    println((不知道,不知道2))  
  377. //}  
  378.   
  379. //  
  380. arrayOfBook[0...2] = ["三国演义","水浒传","红楼梦","通讯录"]  
  381. for element in arrayOfBook {  
  382.     println(element)  
  383. }  
  384.   
  385. // 插入元素  
  386. arrayOfBook.insert("射雕英雄传", atIndex: 0)  
  387.   
  388. // 删除元素  
  389. arrayOfBook.removeLast()  
  390.   
  391. for element in arrayOfBook {  
  392.     println(element)  
  393. }  
  394.   
  395. println(arrayOfBook.capacity)  
  396. // 删除所有元素  
  397. // keepCapacity表示是否保持容量,如果参数为true的话, 同时把元素清为零,但是保留清空之前的空间, 如果参数为false 的话, 清空元素后每添加一个元素时,空间不够用时,会开辟添加上一次元素空间的2倍  
  398.   
  399. arrayOfBook.removeAll(keepCapacity: false)  
  400.   
  401. // 判断数组是否为空  
  402. if arrayOfBook.isEmpty {  
  403.     println(arrayOfBook.capacity)  
  404. }  
  405.   
  406. arrayOfBook.insert("text", atIndex: 0)  
  407.    println(arrayOfBook.capacity)  
  408.   
  409. // 字典  
  410. // C语言的创建一个空字典方式  
  411. var dict : Dictionary<Int, Int> = Dictionary()  
  412. var dict2 : [String : String] = Dictionary()  
  413.   
  414. // OC的形式  
  415. var dict3 = NSDictionary()  
  416.   
  417. var studentOfDict = ["name" : "小明","age" : 18]  
  418.   
  419. // 遍历子典里面的所有的key  
  420. for key in studentOfDict.keys {  
  421.     println(key)  
  422. }  
  423.   
  424. // 遍历字典里所有的value  
  425. for value in studentOfDict.values{  
  426.     println(value)  
  427. }  
  428.   
  429. // 给字典添加一个元素  
  430. studentOfDict["adress"] = "天下第一楼"  
  431. println(studentOfDict)  
  432.   
  433. // 删除一个元素  
  434. studentOfDict.removeValueForKey("adress")  
  435. println(studentOfDict)  
  436.   
  437. studentOfDict["age"] = nil  
  438.   
  439. // 遍历字典里面的key和value  
  440. for (key,value) in studentOfDict {  
  441.   
  442.     println((key,value))  
  443.       
  444. }  

每日更新关注:http://weibo.com/hanjunqiang  新浪微博
 

原文地址: http://blog.csdn.net/qq_31810357/article/details/50032053

相关文章
|
1月前
|
移动开发 前端开发 数据安全/隐私保护
iOS代码混淆-从入门到放弃
iOS代码混淆-从入门到放弃
19 0
|
3月前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
91 2
|
6月前
|
移动开发 前端开发 数据安全/隐私保护
iOS代码混淆-从入门到放弃
iOS代码混淆-从入门到放弃
86 0
|
2月前
|
监控 API Swift
用Swift开发iOS平台上的上网行为管理监控软件
在当今数字化时代,随着智能手机的普及,人们对于网络的依赖日益增加。然而,对于一些特定场景,如家庭、学校或者企业,对于iOS设备上的网络行为进行管理和监控显得尤为重要。为了满足这一需求,我们可以利用Swift语言开发一款iOS平台上的上网行为管理监控软件。
192 2
|
2月前
|
移动开发 前端开发 数据安全/隐私保护
iOS 代码混淆 - 从入门到放弃
iOS 代码混淆 - 从入门到放弃
|
3月前
|
监控 Swift iOS开发
局域网计算机监控软件中利用Swift构建iOS端的移动监控应用
在局域网计算机监控软件的开发中,构建iOS端的移动监控应用是一项关键任务。本文将介绍如何利用Swift语言实现这一目标,通过多个代码示例展示关键功能的实现。
225 1
|
3月前
|
安全 JavaScript 前端开发
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
65 0
|
5月前
|
安全 前端开发 Android开发
鸿蒙开发|鸿蒙系统的介绍(为什么要学习鸿蒙开发|鸿蒙系统的官方定义|鸿蒙和安卓、ios的对比)
鸿蒙开发学习是一项探索性的工作,旨在开发一个全场景分布式操作系统,覆盖所有设备,让消费者能够更方便、更直观地使用各种设备。
291 6
鸿蒙开发|鸿蒙系统的介绍(为什么要学习鸿蒙开发|鸿蒙系统的官方定义|鸿蒙和安卓、ios的对比)
|
5月前
|
JavaScript 前端开发 PHP
用swift开发ios移动端app应用初体验
直接跟着 apple 官方的 SwiftUI 教程跑的,写惯了 javascript 奔放的代码,很多语法理解起来还是有点费劲
57 1
|
6月前
|
移动开发 前端开发 数据安全/隐私保护
 iOS代码混淆-从入门到放弃
代码混淆可以对函数名、变量名、类名等关键代码进行重命名和混淆处理,降低代码的可读性,增加逆向工程的难度,从而有效保护应用程序的安全性,减少开发者的经济损失。