#学志#swift3.0 类的初学习
来源:互联网 发布:java 获取对象大小 编辑:程序博客网 时间:2024/05/17 03:57
老师的作业:
枚举可以同时有原始值和关联值吗??
应该是不可以的;
import UIKitimport Foundationenum Sex{ case male(n : String), female(n : String)}enum BirthError : Error{ case tooYoung case tooOld}//Person类class Person { static var count = 0 //构造函数被访问几次,即创建的人数 var firstName = "" var lastName = "" var sex : Sex let birth : String var address = "" //计算属性年龄 var age : Int{ get{ //给的出生年月日 var year : Int let y = NSString(string: self.birth) year = Int(y.substring(with: NSMakeRange(0, 4)))! //获得当前系统的年份 let calendar: Calendar = Calendar(identifier: .gregorian) var comps: DateComponents = DateComponents() comps = calendar.dateComponents([.year,.month,.day, .weekday, .hour, .minute,.second], from: Date()) let systemY:Int = comps.year! //print(systemY) return (systemY - year) } } //构造函数 init?(firstName:String, lastName:String, sex:Sex, birthday:String, address:String){ defer{ print("") print("现在总共有\(Person.count)个人") print() } self.firstName = firstName self.lastName = lastName self.sex = sex self.address = address do{ self.birth = birthday try processBirth(birthday:birthday) Person.count += 1// print("姓名为:\(self.getName()),现生日日期是:\(birthday), 年龄是:\(self.age)岁, 地址是:\(self.address),属性姓氏:\(self[0]),名称为:\(self[1])") switch self.sex { case let .female(n: s): print("姓名为:\(self.getName()),现生日日期是:\(birthday), 年龄是:\(self.age)岁, 地址是:\(self.address),属性姓氏:\(self[0]),名称为:\(self[1]), 性别为:\(s)") case let .male(n: s): print("姓名为:\(self.getName()),现生日日期是:\(birthday), 年龄是:\(self.age)岁, 地址是:\(self.address),属性姓氏:\(self[0]),名称为:\(self[1]), 性别为:\(s)") default: break; } } catch BirthError.tooYoung{ print("该person的生日日期\"\(birthday)\"设置过小,创建失败!") return nil } catch BirthError.tooOld{ print("该person的生日日期\"\(birthday)\"设置过大,创建失败!") return nil } catch{ //放置一个空的catch防止错误 } } //得到全名 func getName() -> String{ return firstName + lastName; } //判断是否同名 func sameName(p:Person){ print("两人名字分别为:\(self.getName()), \(p.getName())") if self.getName() == p.getName(){ print("两人同名!") } else{ print("两人不同名!") } } //判断是否为相同实例(判断是否为同一个人是通过实例还是所有信息?) func samePerson(p:Person){ if self === p{ print("是同一个人!") } else{ print("不是同一个人!") } } //对生日不合理的进行错误抛出 func processBirth(birthday : String) throws{ if "2000年01月01日" > birth { throw BirthError.tooYoung } if birth > "2016年12月31日"{ throw BirthError.tooOld } } //下标设置,读取姓名 subscript(index : Int) -> String{ get{ switch index{ case 0 : return String(describing: self.firstName) case 1 : return String(describing: self.lastName) default: return "" } } } }func create(){ let m = Sex.male(n:"男") let f = Sex.female(n:"女") print("创建person") let person = Person(firstName:"汪", lastName:"美美",sex:m, birthday :"2013年02月03日",address:"海曙路58号") print("创建person2") let person2 = Person(firstName:"汪", lastName:"美美",sex:f, birthday:"2019年12月25日",address:"长安路58号") print("创建person3") let person3 = Person(firstName:"汪", lastName:"美美",sex:f, birthday:"2012年12月25日",address:"长安路34号") let person4 = Person(firstName:"汪", lastName:"美美",sex:f, birthday:"1990年01月25日",address:"长安路34号") print("person与person3") person?.sameName(p: person3!) print("person与person3") person?.samePerson(p: person3!)}create()
结果(如何同时设置原始值和关联值??):
创建person
姓名为:汪美美,现生日日期是:2013年02月03日,年龄是:3岁,地址是:海曙路58号,属性姓氏:汪,名称为:美美,性别为:男
现在总共有1个人
创建person2
该person的生日日期"2019年12月25日"设置过大,创建失败!
现在总共有1个人
创建person3
姓名为:汪美美,现生日日期是:2012年12月25日,年龄是:4岁,地址是:长安路34号,属性姓氏:汪,名称为:美美,性别为:女
现在总共有2个人
该person的生日日期"1990年01月25日"设置过小,创建失败!
现在总共有2个人
person与person3
两人名字分别为:汪美美,汪美美
两人同名!
person与person3
不是同一个人!
ps:
当某变量为可选类型时,var name : String!
在有值时,若直接输出,则是正常输出;print(name)
若在字符串中输出则带有optional
在无值时,若直接输出则程序出错中断;
若在字符串中输出则显示为nil,但程序不会出错;
代码:
var name : String!
//print(name)
print("\(name)")
name = "htt"
print(name)
print("\(name)")
结果:
nil
htt
Optional("htt")
0 0
- #学志#swift3.0 类的初学习
- #学志#swift3.0 起步
- #学志#swift3.0-面向对象
- 六、swift3.0类的使用
- swift3.0 类的基本使用
- swift3.0的改变
- swift3.0的变化
- Swift3.0的坑
- swift3.0 coredata 的使用
- 支持swift3.0的开源库
- Swift3.0 popToViewController 的使用
- swift3.0的一些知识
- swift3.0的一些知识
- swift3.0的一些修改
- swift3.0 签名的实现
- NSClassFromString swift3.0的坑
- Swift3.0 popToViewController 的使用
- swift3.0:sqlite3的使用
- Android进程间通信(1)
- python - 多进程
- MySQL命令rename:修改表名
- hive常用UDF and UDTF函数介绍-lateral view explode()
- PATbasic1003. 我要通过!
- #学志#swift3.0 类的初学习
- CentOS 上 Jenkins+Maven 安装
- wcf会话管理
- 【NOIP2016普及组】关于这四道水题
- Hadoop 2.2 & HBase 0.96 Maven 依赖总结
- 【NOIP2016】海港
- Lucene学习笔记
- 字体及颜色
- 复杂listView