swift学习笔记


Alt text

口水话: Swift 是一种适用于 iOS 和 OS X 应用的全新编程语言,它建立在最好的 C 和 Objective-C 语言之上,并且没有 C 语言的兼容性限制。Swift 采用安全的编程模式,增加了现代功能使编程更容易、更灵活、更有趣。Swift 以成熟且备受宠爱的 Cocoa 和 Cocoa Touch 框架为 支撑,这是一个重新构想软件开发的机会。

不管怎样,让我们先高呼一声

println("hello world!")

  1. 没错输出语句对比c和oc简单多了 并且swift可用分号也可不用分号
  2. 还有你肯定很奇怪,怎么没有main函数,不需要,在 Swift 中,这行代码就是一个完整的程序。

先简单认识一下

1. 常量和变量

使用 let 来声明常量,使用 var 来声明变量。一个常量的值在编译时并不需要获取,但是你只能为它赋值一次。也就是说你可以用常量来表示这样一个值:你只需要决定一次,但是需 要使用很多次。

1. var myVariable = 42
2. myVarialble = 50
3. let myConstant = 42

常量或者变量的类型必须和你赋给它们的值一样。然而,声明时类型是可选的,声明的同时 赋值的话,编译器会自动推断类型。在上面的例子中,编译器推断出 myVariable 是一个整数(integer)因为它的初始值是整数。Swift 是一门类型安全的语言

显式的指定类型

let explicitDouble: Double = 70

注意:值不会隐式的转为其他类型,如果你需要把一个值转换成其他类型,请显式转换。

var label = "The width is "
var width = 100
var widthLabel = label + String(width)

如果删除最后一行的String,会报错哦,报错内容

cannot invoke '+' with an argument list of type (String, Int) 就是说 + 不能连接string和int,类型不同不能自动连接转换,这个和java不同,java是可以自动将int转为string 的

的作用: 使用()把值转换成字符串的方法:把值写到括号中,并且在括号之前写一个反斜杠

var apples = 3
var age = 125
var appleSummary = "I have (apples) apples"
println(I'm (age) years old

用这个简化了输出


2. 数组和字典

说明:swift中字典和数组都使用[],使用下标和key来访问元素,并且不像oc一样区别可变和不可变了

// 数组
var shoppingList = ["catfish", "water", "tulips"]
shoppingList[1] = "bottle of water" // 直接改变元素的值
// 字典 键值对之间用','号分隔
var occupations - [
    "Malcolm" : "Captain",
    "Kaylee" : "Mechanic"
]
occupations["Jayne"] = "Public Relations"

创建空的字典和数组

let emptyArray = [String]()
let emptyDict = Dictionary<String, Float>()

3. 流程控制语句

使用 if 和 switch 来进行条件操作,使用 for-in、for、while 和 do-while 来进行循环。包裹条
件和循环变量括号可以省略,但是语句体的大括号是必须的

let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0
for score in individualScores{
    if score > 50{
        teamScore += 3
    } else {
        teamScore += 1
    }
}

在 if 语句中,条件必须是一个布尔表达式——像 if score { ... }这样的代码是错误的。
在 if 语句中,即使if后边的语句只有一句也要写{}
if语句右边可以用赋值表达式 但是=右边的必须是可选类型

正确的写法: 只有可选类型这个赋值表达式会返回bool结果

var tempStr: String? = "hello" // 可选类型 
if let str1 = tempStr { // 只有可选类型这个赋值表达式会返回bool结果
    println(str1)
}

错误的写法

var Age = 20 // 不是可选类型
if var oldAge = Age{
    oldAge = Age
}

可选类型,一个可选的值可能试一个具体的值或者是nil,表示值缺失。在类型后边加上问号来标记这个变量的值是可选的

var optionalString : String? = "hello
optionalString == nil

var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
        greeting = "Hello, (name)"
}

如果变量的可选值是 nil,条件会判断为 false,大括号中的代码会被跳过。如果不是 nil,会 将值赋给 let 后面的常量,这样代码块中就可以使用这个值了。

switch 支持任意类型的数据以及各种比较操作——不仅仅是整数以及测试相等。

var vegetableComment = "haha"
let vegetable = "redpepper"
switch vegetable{
    case "celery":
        vegetableComment = "Add some raisins and make ants on a log"
    case "redpepper", "watercress":
        vegetableComment = "hahaha"
    case let x where x.hasSuffix("pepper"): // where 字句
        vegetableComment = "red pepper"
    default:
        vegetableComment = "defalt"
}
println(vegetableComment)

通过改变vegetableComment的值可以看到switch的子句的强大

swift中的switch匹配代码case中:

  1. 可以同时匹配多值参数,就是一个case后边可以跟多个匹配条件,多个匹配条件的匹配结果是逻辑或运算的,也就是说:多参数中只要有一个和条件匹配了就算匹配成功.oc和java中一个case后边只能有一个匹配条件;
  2. swift有where子句,在case匹配条件中可以直接写表达式来匹配;
  3. 关于default的情况:只要case的匹配是exhaustive(详尽的),不然就必须有default

如果是一个枚举类型内部的switch case字句把所有的枚举都匹配过 这时可以不用default子句

总之,感觉swift是一种很安全和严谨的语言;特点

  • 不能隐式的进行类型转换,java可以隐式转换,方便的同时也存在着潜在的危险
  • 可选类型的存在将程序的逻辑判断和编译的任务整合到了语法中;

继续看while和do-while 还有for语句
你可以在循环中使用..来表示范围,也可以使用传统的写法,两者是等价的:

for i in 0..3 {
    
}

// 或者

for var i=0; i<3; i++{
    
    
}
原文地址:https://www.cnblogs.com/cxbblog/p/4092419.html