关闭

对照Java学习Swift--协议(Protocols)

标签: javaswift协议Protocols
1587人阅读 评论(0) 收藏 举报
分类:

简要

协议是苹果给它自己设计的语言的一种类型,Swift和OC都叫协议,它的功能更Java中的接口非常类似,其实就是Java中的接口功能,就是名称不一样而已,我们可以类比来学,但是有一点,Java中没有扩展,所以Java中的接口也是不可以扩展的,但是Swift可以。

协议语法

协议使用protocol关键字来定义:

protocol SomeProtocol {
    // 这里是协议的定义部分
}

Java中的接口使用interface关键字来定义:

public interface SomeInterface {

}

Swift中类、结构体或枚举都可以采纳协议,需要在类型名称后加上协议名称,中间以冒号(:)分隔,采纳多个协议时,各协议之间用逗号(,)分隔。Java中,只有类能够实现接口,类型名称后加上接口名称,中间以implements关键字分隔,我们看下例子:
Swift:

class SomeClass: SomeSuperClass, FirstProtocol, AnotherProtocol {
    // 这里是类的定义部分
}

Java:

public class SomeObject implements SomeInterface,SomeInterface1 {
    // 这里是类的定义部分
}

属性要求

协议要求采纳协议的类型提供特定名称和类型的实例属性或类型属性。协议本身不指定属性是存储型属性还是计算型属性,它只指定属性的名称和类型,具体是哪种类型由采纳协议的类型自己去确定,此外,协议还指定属性是可读的还是可读可写的。

如果协议要求属性是可读可写的,那么该属性不能是常量属性或只读的计算型属性。如果协议只要求属性是可读的,那么该属性不仅可以是可读的,如果代码需要的话,还可以是可写的。
协议总是用 var 关键字来声明变量属性,在类型声明后加上 { set get } 来表示属性是可读可写的,可读属性则用 { get } 来表示:

protocol SomeProtocol {
    var mustBeSettable: Int { get set }
    var doesNotNeedToBeSettable: Int { get }
}

在协议中定义类型属性时,总是使用 static 关键字作为前缀。当类类型采纳协议时,除了 static 关键字,还可以使用 class 关键字来声明类型属性:

protocol AnotherProtocol {
    static var someTypeProperty: Int { get set }
}

Java中没有属性这个概念,类似于Swift的属性有个字段的概念,一般来说字段是private的,接口中不允许使用私有的字段,不过可以在接口中定义一些静态公共的常量,即用public static final修饰的字段。

方法要求

协议可以要求采纳协议的类型实现某些指定的实例方法或类方法。这些方法作为协议的一部分,像普通方法一样放在协议的定义中,但是不需要大括号和方法体。可以在协议中定义具有可变参数的方法,和普通方法的定义方式相同。但是,不支持为协议中的方法的参数提供默认值。

正如属性要求中所述,在协议中定义类方法的时候,总是使用 static 关键字作为前缀。当类类型采纳协议时,除了 static 关键字,还可以使用 class 关键字作为前缀:

protocol SomeProtocol {
    static func someTypeMethod()
}

下面的例子定义了一个只含有一个实例方法的协议:

protocol RandomNumberGenerator {
    func random() -> Double
}

Java8以下的版本中,接口中不允许有方法的实现,但是在Java8及其以上的版本中,接口可以有方法的实现,Swift不允许在协议中有方法的实现,必须为空方法,但是可以在扩展中提供默认方法的实现,在采纳协议的类型中,可以直接调用。
协议可以当做像Swift中其他类型来使用了,有Java开发经验的同学应该知道怎么用了,其他方面都是一些语法糖,像协议的合成,类类型专属协议,可选的协议要求,我们看一下就知道,协议的继承跟类的继承是一样的,用冒号分开,很简单。

0
0
查看评论

国际金融互联报文规范SWIFT之银行识别代码BIC Code介绍

之前通过几篇文章介绍了现代化支付系统行号CNAPS Code、以及金融机构编码的组成,如下所示:人民银行现代化支付系统CNAPS行号介绍金融机构编码结构完整介绍但前面这些编号主要用于国内银行间的支付结算报文传递。而在国际业务,涉及境外外资银行之间的报文传递,人民银行制定的编码规范显然是无法满足需求的...
  • scorpio3k
  • scorpio3k
  • 2017-06-15 17:49
  • 1785

swift报文,银行报文

  • 2009-01-19 16:09
  • 364KB
  • 下载

Java与Swift对比

从Java到Swift还是比较简单的,相比Object-C,Swift和Java的语法更加接近,和最近的Kotlin就更像了。Swift同时支持面向对象编程和函数式编程。Swift比Java功能更加强大,用法更加友好。网上有一份Java和Swift的粗略对比: 基础部分 1.Swift没有m...
  • msyqmsyq
  • msyqmsyq
  • 2016-12-09 14:02
  • 3322

Swift与Java语法结构对比

从Java到Swift还是比较简单的,相比Object-C,Swift和Java的语法更加接近,和最近的Kotlin就更像了。Swift同时支持面向对象编程和函数式编程。Swift比Java功能更加强大,用法更加友好。
  • songkai320
  • songkai320
  • 2016-07-04 20:55
  • 1117

从Java到Swift

我们学习的新事物时,通常并不是从0开始,而是从已知开始,将新事物与已知的进行比较分析,从而快速全面地了解新事物。 而我熟悉Java,所以在学习Swift时,就会将Swift与Java进行比较,思考。本文正是这样思考的总结。
  • fearGod
  • fearGod
  • 2016-03-07 21:11
  • 938

swift接口的使用

swift API的使用 最近楼主要使用swift的API接口,楼主有一个习惯,不管开发需要用到什么知识,都喜欢看官方文档,虽然大部分是英文,但是用起来还是感觉可靠,不过对于openstack给的swift API接口,可叫我吃了不少苦,所以写下这篇文章希望给有同样困惑的朋友帮助。 openst...
  • liu1014020126
  • liu1014020126
  • 2016-02-02 19:57
  • 2040

Swift学习 接口的创建与使用

Swift学习 接口的创建与使用
  • billhepeng
  • billhepeng
  • 2015-07-21 19:09
  • 2763

java 与 swift

感悟: android 用 java,ios用 swift, 都是在讨好web开发者,swift和 java script如此类似。 同时也说明移动端app的开发越发和web端接近了,随着带宽的提升,最终也许只有web端的开发。
  • Henry_Wu001
  • Henry_Wu001
  • 2015-04-23 20:35
  • 352

From Java、Android to Swift iOS

  • 2017-12-01 09:09
  • 2.28MB
  • 下载

对照Java学习Swift--基本运算符

swift和Java都有的运算符 赋值运算符(=) 算术运算符(+,-,*,/) 求余运算符(%) 自增和自减运算(++,–) 一元负号运算符(-) 一元正号运算符(+) 组合赋值运算符(+=等) 比较运算符(==,!=,>,<,>=,<=) 三目运算符 逻辑运算(!,&am...
  • lovexieyuan520
  • lovexieyuan520
  • 2016-03-14 15:20
  • 583
    个人资料
    • 访问:935817次
    • 积分:6979
    • 等级:
    • 排名:第3929名
    • 原创:100篇
    • 转载:17篇
    • 译文:0篇
    • 评论:373条
    我的微信公众号
    欢迎大家关注我的微信公众号我的微信公众号
    最新评论