• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

老司机带你快速熟悉Swift 4.1(二)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

对象和类

1、关键字 class

使用class后跟班的名字来创建一个班级。类中的属性声明与常量或变量声明的写法相同,只不过它在类的上下文中。同样,方法和函数声明的写法也是一样的。

通过在类名后加括号来创建一个类的实例。使用点语法来访问实例的属性和方法。


2、init关键字(初始化器)
可以使用init创建一个类。即初始化器在创建实例时设置一个类。


!!!请注意:要将 self.name 属性 与初始值设定项参数区分开来。在创建类的实例时,初始值设定项的参数会像函数调用一样传递。每个属性都需要赋值 - 无论是在其声明中(如同 numberOfSides)还是在初始化程序中(与之一样 name )。

deinit如果您需要在释放对象之前执行一些清理, 请使用此命令创建一个取消初始化程序。

子类在其类名后面包含它们的超类名称,并用冒号分隔。不要求类为任何标准根类继承,所以您可以根据需要包含或省略超类。

覆盖超类实现的子类上override的方法被标记为 - 无意中覆盖方法,如果没有override,则被编译器检测为错误。编译器还检测override那些实际上并没有覆盖超类中任何方法的方法。

  1. class Square: NamedShape {
  2.    var sideLength: Double
  3.    
  4.    init(sideLength:Double, name: String) {
  5.        self.sideLength =sideLength
  6.        super.init(name:name)
  7.        numberOfSides = 4
  8.     }
  9.    
  10.    func area() -> Double {
  11.        return sideLength * sideLength
  12.     }
  13.    
  14.    override func simpleDescription() -> String {
  15.        return "A square with sides of length \(sideLength)."
  16.     }
  17. }
  18. let test = Square(sideLength:5.2, name: "my test square")
  19. test.area()
  20. test.simpleDescription()


枚举和结构

1、枚举:

使用enum创建一个枚举。像类和所有其他命名类型一样,枚举可以具有与它们关联的方法。


默认情况下,Swift分配原始值从零开始,每次递增1,但您可以通过显式指定值来更改此行为。在上面的例子中,Ace明确给出了一个原始值1,其余的原始值是按顺序分配的。您也可以使用字符串或浮点数作为枚举的原始类型。使用该rawValue属性来访问枚举个案的原始值。

使用init?(rawValue:)初始化程序从原始值创建枚举的实例。它返回匹配原始值的枚举情况或者nil没有匹配的情况Rank

  1. if let convertedRank = Rank(rawValue: 3) {
  2. let threeDescription = convertedRank.simpleDescription()
  3. }


枚举的实例值是实际值,而不仅仅是编写其原始值的另一种方式。事实上,在没有有意义的原始价值的情况下,您不必提供一个。


注意hearts上面引用枚举情况的两种方式:当为hearts常量赋值时,枚举大小写Suit.hearts由全名引用,因为该常量没有指定显式类型。在交换机内部,枚举案由缩写形式引用,.hearts因为self已知该值是套装。只要该值的类型已知,您就可以使用缩写形式。


如果枚举具有原始值,则这些值将作为声明的一部分来确定,这意味着特定枚举案例的每个实例始终具有相同的原始值。枚举案例的另一种选择是将值与案例相关联 - 这些值在创建实例时确定,并且对于枚举案例的每个实例它们可以不同。您可以将关联的值视为像枚举大小写实例的存储属性一样工作。例如,考虑从服务器请求日出和日落时间的情况。服务器或者以请求的信息作出响应,或者以对出错的描述做出响应。

  1. enum ServerResponse {
  2. case result(String, String)
  3. case failure(String)
  4. }
  5. let success = ServerResponse.result("6:00 am", "8:09 pm")
  6. let failure = ServerResponse.failure("Out of cheese.")
  7. switch success {
  8. case let .result(sunrise, sunset):
  9. print("Sunrise is at \(sunrise) and sunset is at \(sunset).")
  10. case let .failure(message):
  11. print("Failure... \(message)")
  12. }


2、结构:

使用struct创建的结构。结构支持许多与类相同的行为,包括方法和初始化器。结构和类之间最重要的差异之一就是结构在代码中传递时总是被复制,但类是通过引用传递的。


协议和扩展

1、使用protocol申报的协议。
  1. protocol ExampleProtocol {
  2. var simpleDescription: String { get }
  3. mutating func adjust()
  4. }


2、类,枚举和结构都可以采用协议。



鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
3.6 if和if-let判断语句的使用解析 [Swift原创教程]发布时间:2022-07-14
下一篇:
Swift经典算法-希尔排序法发布时间:2022-07-14
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap