昨天提到了protocol,今天我们就学习一下extenison的用法,昨天我们可以透协定去规范我们的struct或者class等等,我们可以透过将protocol跟extension的结合,去实现swift里面原本不能做到的事情譬如整数跟小数相除。
import UIKit
protocol Number {
var doubleValue: Double { get }
}
extension Double: Number {
var doubleValue: Double {
return self
}
}
extension Int: Number {
var doubleValue: Double {
return Double(self)
}
}
func *(lhs: Number, rhs: Number) -> Double { //乘法
return lhs.doubleValue * rhs.doubleValue
}
func /(lhs: Number, rhs: Number) -> Double { //除法
return lhs.doubleValue / rhs.doubleValue
}
let floatNumber: Double = 5.5
let doubleNumber: Int = 2
let resultNumber = floatNumber / doubleNumber
print(resultNumber)
当然你如果你的型态是其他的话,我们只需要新增额外的extension,譬如你的型态是float
extension Float: Number {
var doubleValue: Double {
return Double(self)
}
}
或是你要做加法除法
func +(lhs: Number, rhs: Number) -> Double { //加法
return lhs.doubleValue + rhs.doubleValue
}
func -(lhs: Number, rhs: Number) -> Double { //减法
return lhs.doubleValue - rhs.doubleValue
}
当然我们也可以结合之前的protocol
protocol ShowID {
func showId()
}
extension ShowID {
func showId () {
print("1234")
}
}
protocol ShowUserName {
func showUserName()
}
extension ShowUserName {
func showUserName() {
print("allen")
}
}
class User1: ShowID ,ShowUserName { }
let allen = User1()
allen.showUserName()
allen.showId()
我们可以让class去继承上面的protocol,再透过extenison的方法,写说我们协定要干嘛,这样做的原因是,我的类别可能需要继承两个父类别,但是我们没办法做到同时继承两个父类别,我就可以透过使用extension的方式去实现它
OS:XP SP3 编译器: DEV C++ 4.9.9.2 工具: OD (ollydbg) 大家...
我们将从价格、曲库、音质、歌词方面比较 Spotify 和 Apple Music,让你可以一次了解...
前言 在开赛前,先来做个小小的自我介绍好了!目前是火箭队的网页设计组,加入火箭队前有上过六角学院的U...
前言 几十年前,演出星际迷航记(Star Trek)里Leonard Nimoy(饰演Spock)...
本篇大纲:轴线的组成、建立轴线的必备工具、绘制轴线的API、ticks 刻度、XY 轴范例 讲了好...