Swift学习笔记(一)

简单记录学习Swift的笔记

简单值

  • 使用let来声明常量,使用var来声明变量。
  • 常量或者变量的类型,必须和你赋给它们的值一样。然而,不用明确地声明类型,声明的同时赋值的话,编译器会自动推断类型。
  • 如果初始值没有提供足够的信息(或者没有初始值),那你需要在变量后面声明类型,用冒号分割。
  • 值永远不会被隐式转换为其他类型。如果你需要把一个值转换成其他类型,请显式转换。

例如

let label = "The width is"
let width = 94
let widthLabel = label + String(width)
  • 有一种更简单的把值转换成字符串的方法:把值写到括号中,并且在括号之前写一个反斜杠。
let firstWord = "Lin"
let secondWord = "i love \(firstWord)"
  • 使用方括号[]来创建数组和字典,并使用下标或者键(key)来访问元素。最后一个元素后面允许有个逗号。
var shoppingList = ["catfish", "water", "tulips", "blue paint"]
shoppingList[1]

var occupations = [
    "Malcolm": "Captain",
    "Kaylee": "Mechanic",
]
occupations["Jayne"] = "Public Relations"
  • 要创建一个空数组或者字典,使用初始化语法。
let emptyArray = [String]()
let emptyDictionary = [String: String]()
  • 如果类型信息可以被推断出来,你可以用[][:]来创建空数组和空字典——就像你声明变量或者给函数传参数的时候一样。
shoppingList = []
occupations = [:]

控制流

  • 使用ifswitch来进行条件操作,使用for-inforwhilerepeat-while来进行循环。
  • 包裹条件和循环变量括号可以省略,但是语句体的大括号是必须的。
let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0
for score in individualScores {
    if score > 50 {
        teamScore += 3
    } else {
        teamScore += 1
    }
}
print(teamScore)
  • if语句中,条件必须是一个布尔表达式
  • 你可以一起使用iflet来处理值缺失的情况。这些值可由可选值来代表。一个可选的值是一个具体的值或者是nil以表示值缺失。在类型后面加一个问号来标记这个变量的值是可选的。
var optionalString: String? = "Hello"
print(optionalString == nil)

var optionalName: String? = "Lin"
var greeting = "Hello!"

optionalName = nil
if optionalName == nil {
   greeting = "Lix love Lin ?"
}else{
    let name = optionalName
    greeting = "\(name) love Lix ?"
}
  • 如果变量的可选值是nil,条件会判断为false,大括号中的代码会被跳过。如果不是nil,会将值赋给let后面的常量,这样代码块中就可以使用这个值了。
  • 另一种处理可选值的方法是通过使用??操作符来提供一个默认值。如果可选值缺失的话,可以使用默认值来代替。
let nickName: String? = "球球 ?"
let fullName: String? = "LinHong"
let informalGreeting = "Hi \(nickName ?? fullName)"
  • switch支持任意类型的数据以及各种比较操作——不仅仅是整数以及测试相等。
let sport = "basketball"
switch sport {
case "football":
    print("this is the first sport")
    
case "running":
    print("Lin was running everyday")
    
case let x where x.hasSuffix("ball"):
    print("Lix play \(sport) everyday")
    
default:
    print("keep moving")
}
  • 运行switch中匹配到的子句之后,程序会退出switch语句,并不会继续向下运行,所以不需要在每个子句结尾写break
  • 你可以使用for-in来遍历字典,需要两个变量来表示每个键值对。字典是一个无序的集合,所以他们的键和值以任意顺序迭代结束。
let interestingNumbers = [
    "Prime": [2,3,5,7,11],
    "Fibonacci": [1,1,2,3,5,8,13],
    "Square": [1,4,9,16]
]

var largest = 0
var numberClass = "number"
for (kind, numbers) in interestingNumbers {
    for number in numbers {
        if number > largest {
            largest = number
            numberClass = kind
        }
    }
}

print(largest)
print(numberClass)
  • 使用while来重复运行一段代码直到不满足条件。循环条件也可以在结尾,保证能至少循环一次。
var n = 2
while n < 100 {
    n = n * 2
}
print(n)

var m = 2
repeat {
 m = m * 2
} while m < 100     //循环条件可以在结尾,至少保证循环一次
print(m)
  • 你可以在循环中使用..<来表示范围。
var total = 0
for i in 0..<4 {
    total += i
}
print(total)
  • 使用..<创建的范围不包含上界,如果想包含的话需要使用...
var total = 0
for i in 0...100 {
    total += i
}
print(total)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

【Go 语言社区】Go语言运算符

运算符是一个符号,告诉编译器执行特定的数学或逻辑操作。 Go语言有丰富的内置运算符和运算符提供的以下几种类型: 算术运算符 关系运算符 逻辑运算符 位运算符 赋...

36316
来自专栏北京马哥教育

一文搞懂 Python 正则表达式用法

1453
来自专栏小樱的经验随笔

【Java学习笔记之十】Java中循环语句foreach使用总结及foreach写法失效的问题

foreach语句使用总结 增强for(part1:part2){part3}; part2中是一个数组对象,或者是带有泛性的集合. part1定义了一...

2787
来自专栏Python小屋

详解Python函数式编程之map、reduce、filter

map()、reduce()、filter()是Python中很常用的几个函数,也是Python支持函数式编程的重要体现。不过,在Python 3.x中,red...

3716
来自专栏北京马哥教育

正则表达式基本语法

\将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,“n”匹配字符“n”。“\n”匹配换行符。序列“\\”匹配“\”,“\(”匹配“(”。^匹...

3627
来自专栏Python小屋

Python内置函数sorted()从入门到精通

Python内置函数sorted()可以对列表、元组、字典、集合、字符串、range对象以及其他可迭代对象进行排序,返回排序后的列表,支持使用key参数指定排序...

28110
来自专栏C++

python笔记:#010#运算符

1321
来自专栏我和PYTHON有个约会

25. 企业级开发基础6:面向对象特征(继承)

继承是让我们抽象的对象之间存在一定的所属关系 在继承关系中,我们一定要明确会出现这样的一种关系~父类、子类,子类继承自父类,可以继承父类中的公开的属性和方法(...

731
来自专栏Bingo的深度学习杂货店

三个数的和小于等于k

给一个数组以及一个数K, 从这个数组里面选择三个数,使得三个数的和小于等于K, 有多少种选择的方法?(不包括重复的情况) Example: Input: nu...

3985
来自专栏赵俊的Java专栏

Python 基础语法

1945

扫码关注云+社区

领取腾讯云代金券