ft文件。
示例:
class Recipe {
var name: String = ""
var duration: Int = 10
var ingredients: [String] = ["egg"]
}
在上面的示例中我们创建了一个Recipe类,里面有三个属性,并且都声明了类型,做了初始化。在Swift中类在初始化的时候它的属性必须都被初始化。如果你不想设置某个属性的默认值的话,使用?把它加入可选链中:
class Recipe {
var name: String?
var duration: Int = 10
var ingredients: [String]?
}这样当你创建一个类的实例的时候:
var recipeItem = Recipe()
这些可选链中的属性的初始值是nil。你可以给它们赋值:
recipeItem.name = "Mushroom Risotto"
recipeItem.duration = 30
recipeItem.ingredients = ["1 tbsp dried porcini mushrooms", "2 tbsp olive oil", "1 onion,
chopped", "2 garlic cloves", "350g/12oz arborio rice", "1.2 litres/2 pints hot vegetable
stock", "salt and pepper", "25g/1oz butter"]
类可以继承父类和遵守协议,示例:
OC中:
?@interface SimpleTableViewController : UIViewController
Swift中:
class SimpleTableViewController : UIViewController, UITableViewDelegate, UITableViewDataSource
7.Methods方法
Swift允许你在类、结构体和枚举中创建方法。
下面是一个没有参数和返回值的方法:
class TodoManager {
func printWelcomeMessage() {
println("Welcome to My ToDo List")
}
}
在OC中调用一个方法的格式如下:
todoManager printWelcomeMessage];
在Swift中调用一个方法的格式如下:
todoManager.printWelcomeMessage()
如果要建立一个带参数和返回值的方法,格式如下:
class TodoManager {
func printWelcomeMessage(name:String) -> Int {
println("Welcome to \(name)'s ToDo List")
return 10 }
}
"->"用来指示方法的返回值类型。
你可以这样调用上面的方法:
var todoManager = TodoManager()
let numberOfTodoItem = todoManager.printWelcomeMessage("Simon")
println(numberOfTodoItem)
8.Control Flow控制流
Swift中的控制流和循环颇有C语言的风格。
8.1for循环
for循环使用 for - in的结构,并且可以和Range(...或者..<)配合使用:
for i in 0..<5 {
println("index = \(i)")
}
会在控制台输出:
index = 0
index = 1
index = 2
index = 3
index = 4
如果我们使用...这是个闭集合,结果会返回:
index = 0
index = 1
index = 2
index = 3
index = 4
index = 5
如果你想用c中的结构也是可以的:
for var i = 0; i < 5; i++ {
println("index = \(i)")
}
只不过for后面不用写括号了。
8.2 if-else结构
和OC中很像,只不过Swift中更简单一些,条件语句不需要写在括号中:
var bookPrice = 1000;
if bookPrice >= 999 {
println("Hey, the book is expensive")
} else {
println("Okay, I can affort it")
}
8.3 switch结构
Switch中的switch结构拥有非常强大的功能。
示例:
switch recipeName {
case "Egg Benedict":
println("Let's cook!")
case "Mushroom Risotto":
println("Hmm... let me think about it")
case "Hamburger":
println("Love it!")
default:
}
println("Anything else")
首先Swift中的switch中可以控制字符串,OC中的NSString是不能被switch控制的,在OC中要实现类似功能你只能使用if-else。
另外你可以看到在每个case中我们都没有写break,在OC中你必须在每个case中写break,否则在当前case结束后会进入下一个case,在Swift中当前case被执行后就会自动跳出switch,如果需要进入下一个case,添加fallthrough语句。
最后,switch的case中可以包含Range操作:
var speed = 50
switch speed {
case 0:
println("stop")
case 0...40:
println("slow")
case 41...70:
println("normal")
case 71..<101:
println("fast")
default:
println("not classified yet")
}
9.Tuple元组
元组类型在OC中是没有的,它可以包含多种不同的数据类型,你可以把它用作方法的返回值,这样就可以用一个元组来代替返回一个复杂的对象了。例如:
let company = ("AAPL", "Apple Inc", 93.5)
你可以把元组company中的值取出来,用法如下:
let (stockCode, companyName, stockPrice) = company
println("stock code = \(stockCode)")
println("company name = \(companyName)")
println("stock price = \(stockPrice)")
或者company.0、company.1这样的方法也能取到值,更好的做法是在定义元组的时候给每个元素起个名字:
let product = (id: "AP234", name: "iPhone 6", price: 599)
println("id = \(product.id)")
println("name = \(product.name)")
println("price = USD\(product.price)")
下面是一个把元组作为返回类型的例子:
class Store {
func getProduct(number: Int) -> (id: String, name: String, price: Int) {
var id = "IP435", name = "iMac", price = 1399
switch number {
case 1:
id = "AP234"
name = "iPhone 6"
price = 599