Swift入门 一

2015-11-05

Swift代码 

开发技巧:

  • 自动类型推导: option + click 查看变量/方法的说明
  • 能不写类型就不写类型,减少冗余代码
  • 苹果推荐我们先定义常量,只有需要修改的时候才定义变量

数据类型:

  • 类型安全的语言,在任何情况下都不会进行自动类型转换(隐式类型转换),所有的转换都必须是显示的
  • 只有相同类型的值才能进行赋值
  • 哪怕是CGFloat和Double之间也必须进行转换  
//  常量 let  
let number: Int
number = 10
let a = 10 //自动类型推导 option + click 查看变量/方法的说明
//  变量 var  
var value: Double
value = 20

元祖

  • 可以将多个值保存在一起
  • 元祖可以保存不同数据类型的值
  • 元祖和数组一样,可以通过索引访问元祖中保存的值,除此之外,还可以给每一个值起一个名字,将来通过这个名字来访问对应的值,还能在定义的同时取出元祖中的值
let number = (10, 11, 12)
//通过索引访问
number.0  // 10
number.1  // 11
number.2  // 12
let person = (name: "gm", age: 30,score: 100)
// 通过名称访问
person.name
person.age
person.score
let values: (String, Int, Double) = ("gm",30,99.9)
let (name, age, score) = ("gm",30,99.9)
name
age
score

if

  • 必须是bool值,取值true/false
  • 条件表达式中的()可以省略
  • {}不允许省略,哪怕只有一条语句
 if num == 10
{
  print("值为10")
}

三目运算符

  • 用法和OC中一模一样,除了条件表达式只能是bool类型之外
  • 开发中三目运算符用的非常多
let value = 10
let res = value == 20 ? 20 : 0

switch

  • 用法大致和OC中一样
  • 条件表达式()可以省略
  • break可以省略,不会穿透
  • OC 中如果想在case中定义变量,必须加上{},否则作用域混乱,而Swift不用
  • OC中default的位置可以随便乱写,会先判断完所有的case才会执行default,swift中不能随便乱写,只能写在最后
  • OC中default是可以省略的,swift default大部分是不可以省略的
let number = 0
switch number 
{
  case 0:
    print("0")
  case 5:
    print("5")
  case 10:
    print("10")
  default:
    print("default")
}

 可选类型

  • 在OC中可以给一个对象类型变量赋值为nil或者一个对象,而在Swift中如果想给一个变量赋值为nil那么必须明确指定为可选类型才可以,也就是说普通类型是不能赋值为nil
  • 如果以后但凡看到init后面跟上一个?,酒店代表初始化方法返回的值是可选的
  • 可选类型不能直接使用,如果要使用可选类型的值,就必须对可选类型进行解包
  • 解包: 告诉系统可选类型的变量,一定有值,乳沟可选类型的值没有值,我们又进行强制解包,那么会报错
  • 解包的方式: 加!
let str = "http://aunty.com/"
let url = NSURL(string: str)
print(url!) //解包
let num1: Int? = 10
let num2: Int =20
let sum = num1! + num2 //不推荐我们随便使用强制解包
if let temp = num1  //可选绑定 {   let sum = temp + num2 }

可选绑定

  • 专门用于解决强制解包的弊端
  • 开发中如果想使用一个可选类型的值,也不一定一定选用可选绑定,因为如果可选类型的值较多,而又属于同一个逻辑,那么一不小心就会形成if嵌套
let url2 = NSURL(string: str)
print(url2)
if let temp = url2
{
  print(abc)
}

let v1: Int? = 10
let va: Int? = 20
if let m =v1
{
  if let n = v2
  {
    let sum = n1 + n2
  }
}

guard 

  • 类似于可选绑定,swift2.0推出
  • 只有条件为假才会执行else后面大括号中的代码
func test()
{
  guard let m = v1 else
  {
    print("没有值")
    return
  }
  guard let n = v2 else
  {
    print("没有值")
    return
  }
  let  _ = m + n
}
test()

for循环

  • 基本用法和OC一样
  • 条件表达式必须是bool类型的值
  • 条件表达式中的() 可以省略
  • {} 不可以省略
for var i = 0; i < 10; i++
{
  print(i)
}

区间

  • 半闭区间: 0..<10 包含头不包含尾
  • 闭区间: 0...10 包含头也包含尾
for i in 0..<10
{
  print(i)
}

while 循环

  • 基本用法和OC一致
  • 条件表达式必须是bool类型的值
  • 条件表达式的()可以省略
  • 在OC中如果{}中只有一条语句,那么{}可以省略,而Swift不可以
var value = 0
repeat{
    print(value)
    value++
}while value <10

数组

  • 格式 var arr:[Int] = [数值1, 数值2, 数值3]
  • 不可变数组 let == NSArray
  • 可变数组 var
  • 不可以给不可变数组追加内容
let arr = [10, 20, 30] //开发中用这种
let arr2: [Int] = [10, 11, 12] 
let arr3: Array<Int> = [10, 11, 12]

var arr4: [Int] // 先定义后使用的时候加数据类型
arr4 = [10, 11, 12]

arr4[0] // 查找
arr4[0] = 55 // 修改
arr4.append(998) // 追加
arr4.removeAtIndex(0) // 移除
arr4.removeAll() // 全部移除
arr.capacity //开辟存储空间的规则: 2 的倍数
var arr5 = [Int]()  //如何创建空数组

字典

  • {} 替换为[]
  • 去掉所有的@
let dict = ["name": "gm", "age": 30]
let dict2: [String : NSObject] = ["name": "gm", "age": 30]
let divt3: Dictionary<String, AnyObject> = ["name": "gm", "age": 30]
let dict4 = [String: AnyObject]() // 在企业开发中,使用频率最高的字典类型就是[String: AnyObject]

var dict = ["name": "gm", "age": 30] //可变

dict["name"] // 取值
dict["name"] = "mm" // 更新
dict["score"] = 99.9 // 新增 score之前是不存在的
dict.removeValueForKey("name") //移除
for key in dict.keys  // 遍历
{
  print(dict[key])
}
//将dict中的key 赋值给k, value 赋值给v
for (k, v) in dict
{
  print(k)
  print(v)
}
原文地址:https://www.cnblogs.com/aunty/p/4938736.html