ifletroomCount=john.residence!.numberOfRooms{println("John's residence has \(roomCount) room(s).")}else{println("Unable to retrieve the number of rooms.")}
ifletroomCount=john.residence?.numberOfRooms{println("John's residence has \(roomCount) room(s).")}else{println("Unable to retrieve the number of rooms.")}// Unable to retrieve the number of rooms.john.residence=Residence()ifletroomCount=john.residence?.numberOfRooms{println("John's residence has \(roomCount) room(s).")}else{println("Unable to retrieve the number of rooms.")}//John's residence has 1 room(s).
classPerson{varresidence:Residence?}//住宅classResidence{varrooms=[Room]()varnumberOfRooms:Int{returnrooms.count}subscript(i:Int)->Room{returnrooms[i]}funcprintNumberOfRooms(){println("The number of rooms is \(numberOfRooms)")}varaddress:Address?}//房间classRoom{letname:Stringinit(name:String){self.name=name}}// 地址classAddress{varbuildingName:String?varbuildingNumber:String?varstreet:String?funcbuildingIdentifier()->String?{if(buildingName!=nil){returnbuildingName}elseif(buildingNumber!=nil){returnbuildingNumber}else{returnnil}}}letjohn=Person()// 调用属性ifletroomCount=john.residence?.numberOfRooms{println("John's residence has \(roomCount) room(s).")}else{println("Unable to retrieve the number of rooms.")}// 打印 "Unable to retrieve the number of rooms。//调用方法// ()等价于Void类型ifletprintNumberOfRooms:()=john.residence?.printNumberOfRooms(){println("It was possible to print the number of rooms.")}else{println("It was not possible to print the number of rooms.")}// 打印It was not possible to print the number of rooms.//调用可选链脚本ifletfirstRoomName=john.residence?[0].name{println("The first room name is \(firstRoomName).")}else{println("Unable to retrieve the first room name.")}// 打印 "Unable to retrieve the first room name."。