内容简介:默认情况下不需要加类型,有类型推导。如果需要指定类型,可以这么写:
类型
- Int
- Double
- Float
- Bool
- String
- Array
- Tuple
- Set
- Dictionary
类型别名
-
使用
typealias来声明类型别名
变量
let var
默认情况下不需要加类型,有类型推导。如果需要指定类型,可以这么写: let myVar: Double = 2
-
还可以使用
\()在字符串里进行运算,例如:
let apples = 3
let oranges = 4
print("\(apples) apples and \(oranges) oranges")
- 用三引号来包含换行的字符串。
let words = """
hello world
world hello
hello world
world hello
this that
"""
print(words)
- 使用中括号来创建数组和字典/哈希表:
var shoppingList = ["catfish", "water", "tulips"]
shoppingList[1] = "bottle of water"
var aDict: [String: Any] = [
"hello": "world",
"this": 1,
]
print(shoppingList, aDict)
- 如果要创建控字典或者数组:
let emptyArray = [String]() let emptyDictionary = [String: Float]() // 或者这样,当然只有在类型信息可以推导出来的时候才能这样 shoppingList = [] occupations = [:]
控制流
-
可以使用
for... in...,while...,repeat...while...来进行循环。循环变量可以不写括号(当然也可以写) -
if后面只能接bool值,同时也可以接一个let,用于判断值是否为空
var shoppingList: [String?] = ["hello", nil, "world"]
for i in shoppingList {
if let item = i {
print(item)
}
}
-
??可以用来判断值是否为空,如果为空,就使用默认值,例如:
let nickName: String? = nil
let defaultNickname = "foo"
print("\(nickName ?? defaultNickname)")
-
switch...case...语句:
let 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.")
}
// Prints "Is it a spicy red pepper?"
-
..<和...类似于 Python 中的range,前者不包括上界,后者包括上界:
for i in 0..<4 {
print(i)
}
for i in 0...4 {
print(i)
}
函数
-
使用
func关键字声明函数,->指示函数返回类型
面向对象
-
class关键字用于声明类
class NamedShape {
var name: String
init(name: String) {
self.name = name
}
func SayHi() -> String {
return "Hello, I'm shape \(self.name)"
}
}
print(NamedShape(name: "foo").SayHi())
-
init是类的构造器,deinit是析构器 -
getter和setter:
class EquilateralTriangle: NamedShape {
var sideLength: Double = 0.0
init(sideLength: Double, name: String) {
self.sideLength = sideLength
super.init(name: name)
numberOfSides = 3
}
var perimeter: Double {
get {
return 3.0 * sideLength
}
set {
sideLength = newValue / 3.0
}
}
override func simpleDescription() -> String {
return "An equilateral triangle with sides of length \(sideLength)."
}
}
var triangle = EquilateralTriangle(sideLength: 3.1, name: "a triangle")
print(triangle.perimeter)
// Prints "9.3"
triangle.perimeter = 9.9
print(triangle.sideLength)
// Prints "3.3000000000000003"
-
如果不需要
getter和setter,但是需要前置和后置动作,可以使用willSet,didSet
错误处理
throw do...catch...
do {
let printerResponse = try send(job: 1440, toPrinter: "Gutenberg")
print(printerResponse)
} catch PrinterError.onFire {
print("I'll just put this over here, with the rest of the fire.")
} catch let printerError as PrinterError {
print("Printer error: \(printerError).")
} catch {
print(error)
}
-
也可以用
try?来捕获异常,如果有异常,返回一个nil,否则,返回值:let printerSuccess = try? send(job: 1884, toPrinter: "Mergenthaler") -
swift 也有
defer关键字
范型
- 用尖括号来表示范型
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Flex布局语法笔记
- WPF绑定语法的笔记
- Vue:学习笔记(三)-模板语法(1)
- 《Haskell趣学指南》笔记之基本语法
- JSP经典学习笔记(包含各种入门常用语法)
- 胡子哥的重学前端(笔记)css语法
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
光线跟踪算法技术
萨芬 / 刘天慧 / 清华大学出版社 / 2011-3 / 98.00元
《光线跟踪算法技术》详细阐述了与光线跟踪问题相关的高效解决方案及相应的数据结构和算法,主要包括采样技术、投影视图、视见系统、景深、非线性投影、立体视觉、光照与材质、镜面反射、光泽反射、全局光照、透明度、阴影、环境遮挡、区域光照、光线与对象间的相交计算、对象变换、栅格技术以及纹理映射技术等内容。此外,《光线跟踪算法技术》还提供了相应的算法、代码以及伪代码,以帮助读者进一步理解计算方案的实现过程。 ......一起来看看 《光线跟踪算法技术》 这本书的介绍吧!