1 // Playground - noun: a place where people can play 2 3 import UIKit 4 5 var str = "Hello, World!" 6 7 //1 定义变量常量/常量 8 // define const 9 10 //1.1 定义变量 使用var定义 11 var huangxiangwang = "huangxiangwang" 12 var huangxiangwang2hao = "huangxiangwang2hao" 13 14 println(huangxiangwang) 15 16 //1.2 定义常量 使用let定义 17 let qm = "qiaoming" 18 //qm = "da" //错误 19 20 //1.3 变量常量的命名规范:几乎支持所有的Unicode编码字符,除了一些数字符号,箭头,横线,以及系统的关键字 21 var ?? = "??" 22 println(??) 23 24 var 哈哈 = "哈哈" 25 println(哈哈) 26 27 //错误示范 28 //var var = "afs" 29 //var -aa = "aad" 30 31 32 33 //2.基本类型 34 //2.1 35 //C/C++语言类型: 整型(int), 单精度浮点型(float), 双精度浮点型(double), 布尔型(bool), 字符型(char) 36 //在Swift语言中,基本类型几乎已经被重写了.首字母大写 37 //Swift基本变量类型: Int Float Double Bool String 38 39 //2.2 40 var zs = 213 41 zs 42 let whq = "234" 43 whq 44 //[注]在Swift语言中,声明变量常量如果没有类型而是直接赋值的话,编译器会自动推断出常量变量的类型 45 46 //2.3 命名常量/变量 47 //变量/常量 : 类型 = 值 48 var lmt : String = "刘敏涛" 49 //var lgz : Int = "213" //错误 50 51 //2.4 练习 52 var zwd : Int = 23333 53 //在swift中,整型是Int,系统默认64位,如果系统为32位,则默认32位 54 55 56 var wzb : Int8 = -128 57 //Int8范围: -128 ~ +127 58 59 60 61 //[Practice]变量/常量 62 63 var abcd = "abcd" 64 let qwer = "QWER" 65 let num = 1234 66 67 68 var rkf = 3.5 69 //在Swift中浮点类型默认为double 70 var rly : Float = 2.6 71 var cj = 3.6 72 73 let dfr = rly + Float(cj) 74 //[NOTE]在Swift语言中不支持隐式转化,可以进行显示转化 75 //转化的方式: 类型(变量/常量) 76 77 78 //3.元祖 79 //元祖 就好比数据库中得表,数据库中得一条记录就系那个当与一个元祖.在这个元组中,里面可以存放不同的数据类型的数据 80 var ntt : (String, Int, String) = ("牛田田", 22, "女") 81 ntt.0 82 ntt.1 83 ntt.2 84 85 //通过下标访问元祖中的元素 86 87 var wxx : (name: String, age: Int, Sex: String) = ("王玺玺", 23, "男") 88 //在定义一个元祖的时候可以给元祖的数据一个名字,之后我们通过这个名字访问元祖中的元素 89 wxx.name 90 wxx.age 91 wxx.Sex 92 wxx.0 93 wxx.1 94 wxx.2 95 96 97 //我们可以将元祖的元素分解 98 let gcz = ("龚朝忠", 25) 99 var (name, age) = gcz 100 name 101 age 102 103 //元素分解,遇到不想遇到的参数,可以通过 _ 忽略 104 let shb = ("沈红榜", 23, "男") 105 let (name1, _, sex1) = shb 106 name1 107 sex1 108 109 110 //4.数组 111 //[NOTE]在OC中,数组存放的元素都是基于NSObject类型的对象,企鹅对象类型可以不相同.而在Swift中,数组必须存放系那个同类型的对象 112 113 //定义一个数组 114 var lc : Array = [String]() 115 lc 116 let sxr : Array = [String]() 117 118 //var声明数组为可变数组 119 //let声明数组为不可变数组 120 121 var gst = ["郭松涛", "张国栋", "邵文乐"] 122 //编译器会对类型就行类型推断,gst首先是一个Array数组,其次,里边的数据是String的,所以推断出是字符串数组 123 124 //var ww = ["王伟", 24] NSObject 125 126 //增 127 gst.append("豆培") 128 gst.insert("徐军辉", atIndex: 1) 129 130 //删 131 gst.removeLast() 132 gst.removeAtIndex(1) 133 gst 134 135 //改 136 gst[0] = "马锐" 137 138 //查 139 //1.根据下标访问 140 gst[1] 141 //2.根据下标范围访问 142 //...表示一个闭区间 143 gst[0...2] 144 //..<表示一个开区间 145 gst[0..<2] 146 147 //3.遍历 148 for name in gst { 149 name 150 } 151 152 //4.获取数组中得元素以及位置 153 for (index, name) in enumerate(gst) { 154 index 155 name 156 } 157 158 //5.字典 159 //[NOTE]在Swift中依旧保留了key-value,但是需要注意的地方:value也必须是同一种类型 160 161 //声明一个变量 162 var sc = Dictionary<String, Int>() 163 164 //增 165 //Swift中,通过下标访问字典中的元素,如果字典中没有相对应的key,那么就是添加数据 166 sc["age"] = 2 167 sc["name"] = 4 168 sc 169 170 //删 171 sc.removeValueForKey("age") 172 sc 173 174 //改 175 //通过下标访问字典中的元素,如果字典中有对应的key,那么就修改对应的值 176 sc["name"] = 100 177 sc 178 179 //查 180 //1.下标法 181 //2.遍历 for-in 182 for (key, value) in sc { 183 key 184 value 185 } 186 187 for key in sc.keys { 188 key 189 } 190 191 sc.keys 192 sc.values 193 194 var flag = true 195 flag 196 flag = false 197 //flag = 10 错误 198 199 //String 200 var b_hxw : String = "Xiangwang Huang" 201 b_hxw.uppercaseString //大写 202 b_hxw.lowercaseString //小写 203 204 205 //*************************************************************** 206 //分支结构 207 //1.if-else 208 209 //错误 210 //if 条件 { 211 // 语句块 212 //} 213 // 214 //[NOTE]条件必须是bool类型 215 216 var a = 6 217 if a == 5 { 218 a 219 } else { 220 println("a != 5") 221 } 222 223 //2. switch-case 224 var b = 2 225 switch b { 226 case 0: 227 b + 0; 228 case 1: 229 b + 1; 230 case 2: 231 b + 2; 232 case 3: 233 b + 3; 234 fallthrough //[note]在swift中,通过使用fallthrough可以强制的执行下一个case 235 case 4: 236 b + 4; 237 default: 238 b + 3; 239 } 240 //[NOTE]写switch一定要加上default 241 //[NOTE]在swift中,switch case加强后,无需在每个case后添加break 242 243 //[练习]给一个日期,xx年xx月xx日,计算这一天是这个年的第几天 244 245 //switch中得case可以表示为一个范围,范围可以交叉,执行满足第一个条件后跳出去 246 var c = 300 247 switch c { 248 case 0...300 where c != 300: //使用where进行双重判断 249 println("在0-300之间") 250 case 200...400: 251 println("在300-600之间") 252 case 400...600: 253 println("在600-900之间") 254 default: 255 println("没有这个数") 256 } 257 258 259 //元祖也可以作为switch条件 260 var point = (1, 0) 261 switch point { 262 case (0, 0): 263 println("原点") 264 case (_, 0): 265 println("在X轴上") 266 case (0, _): 267 println("在Y轴上") 268 default: 269 println("其他点") 270 } 271 272 273 //3.循环结构 274 //3.1for 275 for var i = 0; i < 10; i++ { 276 i 277 } 278 279 //3.2 for-in 280 for j in 0..<10 { 281 j 282 } 283 284 //3.3 while 285 var sum = 0 286 //while的条件也需要哦返回值为Bool类型条件 例如:while 1 {}为错误案例 287 while sum < 7 { 288 sum += 1 289 } 290 291 do { 292 sum++ 293 } while sum < 10 294 295 296 //====================================================================== 297 //______________________________________________________________________ 298 //---------------------------------------------------------------------- 299 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 300 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 301 //////////////////////////////////////////////////////////////////////// 302 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 303 //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 304 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 305 //###################################################################### 306 //********************************************************************** 307 //:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 308 //"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 309 //...................................................................... 310 //‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘ 311 312 var abc = 123_456_789 313 abc 314 315 316 //在数组中存放元组 317 var array : Array = [(Int, String)]() 318 for i in 1...10 { 319 var tuple = (i, "\(10 * i)") 320 array.append(tuple) 321 } 322 323 324 //在字典中使用元祖作为value 325 var dic = Dictionary<String, (Int, Int, Int)>() 326 dic["tuple"] = (1, 2, 3) 327 328 329 //在字典中使用数组作为value 330 var array2 = ["a", "b"] 331 var dic2 = ["key" : array2] 332 333 var dic3 = ["key1" : "value1", "key2" : "value2"] 334 335 336 //元组里放数组 337 // 338 var array3 = [1, 2] 339 var array4 = ["a", "b"] 340 var tuple2 = (array3, array4) 341 342 var tuple = ([1, 2], ["a", "b"]) 343 344 345 //Optionals可选类型 346 //在swift中使用可选类型声明变量来处理值可能为nil的情况,如果有值,那就是这个值,如果没有值那就是没有 347 var values : Int? //?表示值是可选类型的,有可能是nil 348 //Optional 349 let numberStr = "12345" 350 values = numberStr.toInt() 351 //强制解析可选类型 352 values! 353 354 var value1 = values! 355 //用!隐式解析可选类型去掉nil的情况 356 357 358 var values1 : Int! 359 let numberStr1 = "12345a" 360 values1 = numberStr1.toInt() 361 values = numberStr1.toInt() 362 //values! 363 //!表示的表示确实有值,而不是nil 364 365 //========================================================= 366 //函数 367 368 //函数定义 369 /* 370 func 函数名 (参数列表) -> (返回值类型) { 371 代码块 372 } 373 */ 374 375 func sayHi (name: String) -> (String) { 376 return "Hi" + name 377 } 378 379 sayHi("QiaoDaye") 380 381 //多个参数,参数之间用逗号隔开 382 func sayBye (name: String, toName: String) -> String { 383 return name + ":Bye! " + toName 384 } 385 386 sayBye("XiangWang", "GuoZhong") 387 388 //返回值为多个参数, 返回值为元祖类型 389 func sayInfo (name: String, age: Int) -> (String, Int) { 390 return (name, age) 391 } 392 393 sayInfo("张三", 20) 394 395 396 //外部参数名 397 func sayGoodBye (#personName: String, #toPersonName: String) { 398 println("\(personName):\"\(toPersonName), goodbye!\"") 399 } 400 401 sayGoodBye(personName: "张三", toPersonName: "李四") 402 403 //默认参数 404 func sum (startNumber: Int = 0, #endNumber: Int) -> Int { 405 var sum: Int = 0 406 for i in startNumber...endNumber { 407 sum += i 408 } 409 return sum 410 } 411 412 sum(endNumber: 100) 413 414 415 416 417 //函数类型 参数类型和返回值类型组成 418 //TODO 419 var funcType: (String, String) -> String = sayBye 420 421 422 423 //nil Nil NULL NSNull的区别 424 //nil 指向不存在的对象指针 425 //Nil 指向零的类指针 426 //NULL 0 427 //NSNull 空对象 428 429 //optional可选类型 430 var value: Int? //?表示值可能为nil 也可能有值 431 let testOptional = "123" 432 value = testOptional.toInt() 433 value 434 435 if value != nil { 436 value! //! 强制解析 437 } else { 438 value 439 }
时间: 2024-09-30 18:54:36