Swift学习总结 - 1

  1. 发布于2014年WWDC,支持iOS、OS X、watchOS,结合了C和Objective-C的优点的一门新语言。
  2. 特性
  • 安全性 提供了更多安全措施,比如值使用前初始化、自动内存管理等。
  • 快速性 llvm编译框架,运行速度快。
  • 表现力 语法简单,易于阅读维护。
  • 兼容性 继承了c语言和oc的特性,并克服了C的兼容性问题。

还有以下特点:

  • 没有宏系统,其协议和扩展源自oc
  • 采用let常量、var变量声明变量
  • 没有显示指针,而是像C#语言一样,依赖值类型/引用类型
  • 不支持强制转换
  1. Swift具有强大的命名字符集,支持代码预览,我们可以通过playground来学习swift的语法
    file - new - playground

    playground

  2. 变量和常量
    变量和常量都要有类型, 值必须与分配的类型相同,代码结尾不要求,加不加都不会报错,注释与OC相同

var aVariable = 100
aVariable = 50
let string = "string"
/** 多变量 逗号 分割 */
var x = 0.0, y = 0.0, z = 0.0
  1. 类型 写法
    var 标识符:类型 = 初始值
    let 标识符:类型 = 初始值
var name: String = "Mark"
let x: Int = 1
let y: Int = 2
let z: Int = 3
print(x + y + z)
  1. 字符串
    支持转义字符,多行需要在首行、尾行添加三引号,并需要删除缩进效果
let label = "The width is "
let width = 100
let widthLabel = label + String(width)
print("The width is \(width)")
let quotation = """
I have \(x + y + z) apples.
And you said you
"""
  1. 数组、字典、集合、元组
    数组:存放相同数据类型元素,有序
var productList = ["apple", "orange", "banana"]
productList[1] = "purple"
print(productList)
productList.append("water")
// 创建空数组
productList = []
print(productList)
let shoppingList: [String] = []

字典:存放key-value对元素

var productInfo = ["name": "apple", "price": String(4)]
productInfo["color"] = "green"
print(productInfo)
// 创建空字典
productInfo = [:]
print(productInfo)
let occupations: [String: Float] = [:]

集合:无序、不重复的相同类型元素

let favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"]

元组:不同数据类型元素的集合

let aturple = (21, 180, 60, "healthy", true)
  1. 可选类型Optional
    可选类型Optional是Swift特有的数据类型,可选类型的值可能是某个类型的值也可能是nil(表示没有值),可选类型的定义,在类型后面加“”,nil可以表示变量值缺失。
    可选项类型

可选类型在使用的时候必须要拆包,下面提供Optional的三种使用方式:

  • 隐式拆包
    在定义可选类型的时候使用“!,后面使该可选类型的时候不需要强制解包
let string1: String! = "Hello"
string1.count
  • 强制解包
    使用可选类型变量时,在其后加“!,如果使用不合法编译器会报错。
let string0: String? = "Hello"
print(string0!)
string0!.count
// 添加保护判断,否则nil时会报错
if string0 != nil{
    let count = string0!.count
    print(count)
}
  • if-let可选绑定
    使用if let临时常量 = 可选类型 来判断可选类型是否包含值,如果包含就把值赋给临时常量,否则(可选类型为nil时)if语句判断为假。
    例1:
var optionalName: String? = "John"
var greeting = "Hello!"
if let name = optionalName {
    greeting = "Hello,\(name)"
    print(greeting)
    print(name)
}

例2:

var string5: String? =  "Marry"
/**
 ① 使用`a ?? b`合并空值运算符的方式来解包,如果有值,则为count,如果为nil,则默认0
 使用合并控制运算符有两个条件:
 1. 表达式a必须是可选类型
 2. 表达式b必须和a的处处类型相同
 */
if string5 != nil{
    let count = string5?.count;
    print(count ?? 0)
}
// 使用可选项绑定来判断可选项是否有值,如果有就赋值给临时变量。同一个if语句可以有多个可选项绑定,用, 分开即可
// ② 使用可选项绑定
if let tempStr = string5{
    let count = tempStr.count
    print(count)
}
  1. 条件语句
  • if分支语句:
var teamScore: Float = 0
let personalScore = 51.0
if personalScore > 50.0{
    teamScore += 3
}else{
    teamScore += 1
}
print(teamScore)
  • switch分支语句:
var vegetable = "red pepper"
switch vegetable{
    case "celery":
        print("Add some raisins and make ants on a log.")
    case "cucumber", "watercress":
        print("That would make a good tea sandwich.")
    case let x where x.hasSuffix("pepper"):
        print("Is it a spicy \(x)")
    default:
        print("Everything tastes good in soup")
}
  1. 循环语句
    for循环:
var total = 0
for i in 0..<4{
    total += i
}
print(total)

不使用循环每一项的值时,可以使用下划线“_”替代变量名:

let max = 10
let base = 3
for _ in 1...max{
    total += base
}
print(total)

循环取数组值:

let array = [1, 3, 5, 7, 9]
var total = 0
for num in array{
    total += num
}
print(total)

取字典中值:

let interestingNumbers = ["Prime": [2, 3, 5, 7, 11, 13],"Fibonacci": [1, 1, 2, 3, 5, 8],"Square": [1, 4, 9, 16, 25],
]
var largest = 0
for (_, numbers) in interestingNumbers {
    for number in numbers {
        if number > largest {
            largest = number
        }
    }
}
print(largest)

while循环(当型循环):

var n = 2
while n < 100{
    n *= 2
}
print(n)

while-repeat循环(直到型循环:循环体至少执行一次)

var m = 2
repeat {
    m *= 2
} while m < 100
print(m)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容