var str: String?
//未被初始化,但是是一个Optional类型,为nil var str: String? str //输出nil //未被初始化,也不是Optional类型 var str2: String str2 //使用时出错
class House {
//房子有几个房间
var numRooms:Int = 5
}
class Person {
//一个人可能有房子也可能没有房子,所以将房子的属性设为可选
var house: House?
}
let xiaowang = Person()
//此时xiaowang没有房子
//如果试图调用xiaowang的house属性,访问house的numRooms属性。过程如下:
//1. 第一种方式: 将house强行解包,用 !。但此时 house 没有值,所以结果是直接崩溃的。
let numroom = xiaowang.house!.numRooms
//2. 用 if let
if let house = xiaowang.house {
let roomCount = house.numRooms
}
//3. 用 ?
if let numRooms = xiaowang.house?.numRooms {
let numroom = numRooms
}
if let numRooms = xiaowang.house?.numRooms {
let numroom = numRooms
}
class Room {
//房间有四个窗子
var numWindows:Int = 4
}
class House {
//房子有几个房间
var room: Room?
}
class Person {
//一个人可能有房子也可能没有房子,所以将房子的属性设为可选
var house: House?
}
let windows = Person().house?.room?.numWindows
if let w = windows {
//windows是可选值
}
class Room {
//房间有四个窗子
var numWindows:Int = 4
func closeWindow() {
print("关窗")
}
}
class House {
//房子有几个房间
var room: Room?
func closeDoor() {
print("关门")
}
}
class Person {
//一个人可能有房子也可能没有房子,所以将房子的属性设为可选
var house: House?
}
let person = Person()
//下面这一句,house 的可选特征,传给了 closeDoor() 的返回值 Void, 所以实际上返回的是一个 可选的Void类型
person.house?.closeDoor()
//所以,判断方法是否存在,可以判断是否为 nil
if person.house?.closeDoor() != nil {
//closeDoor关门的方法调用成功了
}
if person.house?.room?.closeWindow() != nil {
//closeWindow 关窗的方法调用成功了
}
//先看调用属性
class PersonCell: UITableViewCell {
var person: Person? {
didSet {
//此两处,person是可选的。访问person的属性用?,返回的是一个可选的 name
textLabel?.text = person?.name
detailTextLabel?.text = person?.phone
}
}
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: .Subtitle, reuseIdentifier: reuseIdentifier)
accessoryType = .DisclosureIndicator
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
//再看调方法
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let detailVC = DetailViewController()
detailVC.person = persons[indexPath.row]
detailVC.finishedCallBack = {
self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Top)
}
//此处, navigationController是一个可选属性,则 pushViewController 方法返回一个可选的Void。navigationController?.pushViewController(detailVC, animated: true)
}
//要想判断 pushViewController 是否成功,可以做下面的活
if navigationController?.pushViewController(detailVC, animated: true) != nil {
//推成功了
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有