최고의 스위프트 확장 튜토리얼 2024년, 이 튜토리얼에서는 전산 등록,생성자,방법,변수 인스턴스 메소드,첨자,중첩 된 유형,를 배울 수 있습니다.
이 새로운 기능을 추가하기 위해 기존 클래스, 구조체 또는 열거 형을 확장하는 것입니다.
확장 유형에 새로운 기능을 추가 할 수 있지만 기존 기능을 무시할 수 없습니다.
스위프트 확장 할 수 있습니다
확장 선언은 키워드확장을 사용 :
extension SomeType { // 加到SomeType的新功能写到这里 }
다음과 같이 기존의 형식을 확장 할 수있는 확장이, 그것은 하나 이상의 프로토콜에 적용 할 수 있고, 구문은 다음과
extension SomeType: SomeProtocol, AnotherProctocol { // 协议实现写到这里 }
확장 성 및 기존 유형의 계산 속성의 유형의 계산 예를 추가 할 수 있습니다.
다음 예제는 int 형의 계산 예에 다섯 속성을 추가하고 그 기능을 확장 :
extension Int { var add: Int {return self + 100 } var sub: Int { return self - 10 } var mul: Int { return self * 10 } var div: Int { return self / 5 } } let addition = 3.add print("加法运算后的值:\(addition)") let subtraction = 120.sub print("减法运算后的值:\(subtraction)") let multiplication = 39.mul print("乘法运算后的值:\(multiplication)") let division = 55.div print("除法运算后的值: \(division)") let mix = 30.add + 34.sub print("混合运算结果:\(mix)")
위의 프로그램 실행 출력은 다음과 같습니다
加法运算后的值:103 减法运算后的值:110 乘法运算后的值:390 除法运算后的值: 11 混合运算结果:154
확장 기존 유형에 새 생성자를 추가 할 수 있습니다.
이것은 당신이 다른 유형, 생성자 인자, 또는 제공하는 원래의 구현에 포함되지 않은 추가 초기화 옵션의 유형으로 사용자 정의 형식을 확장 할 수 있습니다.
확장 클래스의 init ()에 새로운 간이 생성자를 추가 할 수 있습니다,하지만 그들은 클래스에 새로운 지정 생성자 또는 소멸자 deinit을 추가 할 수 없습니다 ().
struct sum { var num1 = 100, num2 = 200 } struct diff { var no1 = 200, no2 = 100 } struct mult { var a = sum() var b = diff() } let calc = mult() print ("mult 模块内 \(calc.a.num1, calc.a.num2)") print("mult 模块内 \(calc.b.no1, calc.b.no2)") let memcalc = mult(a: sum(num1: 300, num2: 500),b: diff(no1: 300, no2: 100)) print("mult 模块内 \(memcalc.a.num1, memcalc.a.num2)") print("mult 模块内 \(memcalc.b.no1, memcalc.b.no2)") extension mult { init(x: sum, y: diff) { _ = x.num1 + x.num2 _ = y.no1 + y.no2 } } let a = sum(num1: 100, num2: 200) print("Sum 模块内:\( a.num1, a.num2)") let b = diff(no1: 200, no2: 100) print("Diff 模块内: \(b.no1, b.no2)")
위의 프로그램 실행 출력은 다음과 같습니다
mult 模块内 (100, 200) mult 模块内 (200, 100) mult 模块内 (300, 500) mult 模块内 (300, 100) Sum 模块内:(100, 200) Diff 模块内: (200, 100)
확장 기존 유형의 새로운 방법과 인스턴스 형식 메서드를 추가 할 수 있습니다.
다음의 예는 INT 타입에 새로운 인스턴스 메소드라는 항목을 추가합니다 :
extension Int { func topics(summation: () -> ()) { for _ in 0ko<self { summation() } } } 4.topics({ print("扩展模块内") }) 3.topics({ print("内型转换模块内") })
위의 프로그램 실행 출력은 다음과 같습니다
扩展模块内 扩展模块内 扩展模块内 扩展模块内 内型转换模块内 内型转换模块内 内型转换模块内
topics
방법은 사용 () -> ()
함수가 매개 변수 및 반환 값이 없음을 나타내는 단일 유형 매개 변수를.
확장을 정의한 후, 당신은 임의의 정수에 대해 호출 할 수있는 topics
기능을 달성하는 방법은 반복 작업을 수행 할 수 있습니다 :
추가 확장에 의한 방법의 예는 인스턴스 자체를 수정할 수 있습니다.
구조 및 열거 형식은 동일의 방법의 원래 구현을 수정, 자기 또는 재산 방법이 돌연변이의 인스턴스 방법으로 표시해야합니다 수정합니다.
다음의 예는 정사각형 원래 값 계산을 달성하기 위해 스위프트의 두 종류로 광장이라는 새로운 수정 방법을 추가합니다 :
extension Double { mutating func square() { let pi = 3.1415 self = pi * self * self } } var Trial1 = 3.3 Trial1.square() print("圆的面积为: \(Trial1)") var Trial2 = 5.8 Trial2.square() print("圆的面积为: \(Trial2)") var Trial3 = 120.3 Trial3.square() print("圆的面积为: \(Trial3)")
위의 프로그램 실행 출력은 다음과 같습니다
圆的面积为: 34.210935 圆的面积为: 105.68006 圆的面积为: 45464.070735
확장 기존 유형에 새 인덱스를 추가 할 수 있습니다.
스위프트에 다음의 예는 내장 타입 지능 정수 인덱스를 추가합니다. 인덱스는 [n]은 소수점 수를 돌려줍니다
extension Int { subscript(var multtable: Int) -> Int { var no1 = 1 while multtable > 0 { no1 *= 10 --multtable } return (self / no1) % 10 } } print(12[0]) print(7869[1]) print(786543[2])
위의 프로그램 실행 출력은 다음과 같습니다
2 6 5
기존 클래스, 구조체를 확장 할 수 있으며, 열거 새로운 중첩 유형을 추가 :
extension Int { enum calc { case add case sub case mult case div case anything } var print: calc { switch self { case 0: return .add case 1: return .sub case 2: return .mult case 3: return .div default: return .anything } } } func result(numb: [Int]) { for i in numb { switch i.print { case .add: print(" 10 ") case .sub: print(" 20 ") case .mult: print(" 30 ") case .div: print(" 40 ") default: print(" 50 ") } } } result([0, 1, 2, 3, 4, 7])
위의 프로그램 실행 출력은 다음과 같습니다
10 20 30 40 50 50