Latest web development tutorials

การขยายตัวของสวิฟท์

มันคือการขยายชั้นเรียน, struct หรือประเภทการแจงนับที่มีอยู่เพื่อเพิ่มคุณสมบัติใหม่

ส่วนขยายสามารถเพิ่มคุณสมบัติใหม่ให้กับประเภท แต่ไม่สามารถแทนที่การทำงานที่มีอยู่

การขยายตัวของสวิฟท์สามารถ:

  • เพิ่มคุณสมบัติการคำนวณและคุณสมบัติคงที่คำนวณ
  • วิธีการตัวอย่างของวิธีการและรูปแบบที่กำหนดไว้
  • คอนสตรัคใหม่
  • ความคมชัดมาตรฐาน
  • ความหมายและการใช้งานในประเภทที่ซ้อนกันใหม่
  • ทำให้สายที่มีอยู่กับชนิดของโปรโตคอล

ไวยากรณ์

ประกาศขยายใช้นามสกุลคำสำคัญ:

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 () แต่พวกเขาไม่สามารถเพิ่มคอนสตรัคที่กำหนดใหม่หรือ destructor 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 0..<self {
         summation() 
      }
   }
}  

4.topics({
   print("扩展模块内")       
})    
    
3.topics({
   print("内型转换模块内")       
})  

เอาท์พุทการทำงานของโปรแกรมข้างต้นเป็น:

扩展模块内
扩展模块内
扩展模块内
扩展模块内
内型转换模块内
内型转换模块内
内型转换模块内

topics วิธีใช้ () -> () พารามิเตอร์ชนิดเดียวที่แสดงให้เห็นว่าการทำงานไม่มีพารามิเตอร์และค่าตอบแทนไม่

หลังจากกำหนดส่วนขยายที่คุณสามารถเรียกร้องให้จำนวนเต็ม topics วิธีการเพื่อให้เกิดการทำงานคือการดำเนินการงานซ้ำ ๆ :


วิธีการเช่นตัวแปร

ตัวอย่างของวิธีการโดยการเพิ่มส่วนขยายยังสามารถแก้ไขอินสแตนซ์ของตัวเอง

โครงสร้างและการแจกแจงประเภทปรับเปลี่ยนตนเองหรือคุณสมบัติวิธีการจะต้องมีการทำเครื่องหมายว่าเป็นวิธีการที่ตัวอย่างของ mutating เพียงแค่ปรับเปลี่ยนการดำเนินงานเดิมของวิธีการจากที่เดียวกัน

ตัวอย่าง

ตัวอย่างต่อไปนี้จะเพิ่มการปรับเปลี่ยนวิธีการใหม่ที่เรียกว่าตารางประเภทดับเบิลสวิฟท์เพื่อให้บรรลุการคำนวณค่าเดิมตาราง:

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

ห้อย

ส่วนต่อขยายที่สามารถเพิ่มดัชนีใหม่ให้กับประเภทที่มีอยู่

ตัวอย่าง

ตัวอย่างต่อไปนี้จะ Swift เพิ่มชนิดของดัชนี Int จำนวนเต็มในตัว ดัชนี [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

ประเภทที่ซ้อนกัน

คุณสามารถขยายชั้นเรียนที่มีอยู่โครงสร้างและ enumerations เพิ่มประเภทใหม่ที่ซ้อนกัน:

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