- 扩展基础
- swift的扩展使用关键字extension
- swift的扩展至关于OC的分类,即只能新增方法不能新增存储属性。
extension Double {
var km: Double {
return self * 1000
}
var cm: Double {
return self / 100.0
}
var mm: Double {
return self / 1000.0
}
}
var a: Double = 1000
print(a.cm)
复制代码
- 构造器的扩展
- 枚举类型和结构体类型只能够有指定构造器没有便利构造器。而类能够有指定构造器和遍历构造器。
- 类既能够有构造器也能够有遍历构造器。
- 扩展只能够为枚举类型和结构体类型扩展指定构造器,不能扩展遍历构造器。
- 扩展只能给类扩展遍历构造器,不能扩展指定构造器。
//只能给类扩展遍历构造器
class Test {
var name: String = ""
init(name: String) {
self.name = name
}
}
extension Test {
convenience init(nameStr: String) {
self.init(name: nameStr)
self.name = nameStr
}
}
//只能给结构体,枚举扩展指定构造器
struct TestStruct {
var name: String
init(name: String) {
self.name = name
}
}
extension TestStruct {
init(nameStr: String) {
self.init(name: nameStr)
self.name = nameStr + "test"
}
}
enum TestEnum {
case one, two ,three
}
extension TestEnum {
init(type: String) {
switch type {
case "one":
self = .one
case "two":
self = .two
case "three":
self = .three
default:
self = .one
}
}
}
var a = TestEnum(type: "one")
复制代码
- 扩展方法
- 能够给结构体,类扩展实例方法,类方法。
- 能够给结构体,枚举类型扩展可变实例方法。
extension Int {
//1. 扩展实例方法
func repeatClosure(closure: () -> Void){
for _ in 0..<self{
closure()
}
}
//2. 扩展可变实例方法 (结构体或者枚举类型用)
mutating func square(){
self = self * self
}
//3. 扩展类方法
static func sum(_ one: Int, _ two: Int) -> Int{
return one + two
}
}
3.repeatClosure {
print("Hello World!")
}
var a = 3
a.square()
print(a)
print(Int.sum(3,5))
复制代码
- 扩展下标
extension Int {
subscript(num: Int) -> Int {
var numShi = 1
for _ in 0..<num{
numShi *= 10
}
return (self/numShi) % 10
}
}
var a = 123456789
print(a[0])
print(a[2])
复制代码
- 扩展嵌套类型
extension Int {
enum Kind: String {
case negative, zero, positive
}
var kind: Kind {
switch self {
case 0:
return .zero
case let x where x > 0:
return .positive
default:
return .negative
}
}
}
func check(numbers: [Int]) {
for item in numbers {
switch item.kind {
case .negative:
print("-", terminator: " ")
case .zero:
print("0", terminator: " ")
case .positive:
print("+", terminator: " ")
}
}
}
check(numbers: [3, 19, -27, 0, -6, 0, 7])
复制代码
- 总结
- 枚举类型的扩展
- 能够给枚举类型扩展实例方法,类方法,实例可变方法。
- 能够扩展指定构造器。
- 能够扩展下标
- 能够扩展嵌套类型
- 结构体的扩展
- 能够扩展计算属性
- 能够扩展实例方法,类型方法,实例可变方法。
- 能够扩展指定构造器。
- 能够扩展下标。
- 能够扩展嵌套类型。
- 类的扩展
- 能够扩展计算属性。
- 能够扩展实例方法,类型方法。
- 能够扩展便利构造器。
- 能够扩展下标
- 能够扩展嵌套类型