Introduksiya İŞİD “Swift 5.1”də “Swift 5.1” də təqdim olunub. VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsilən edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayan ulduzdu. some any protocol P {} struct S: P {} // 'any P' is an explicit existential type. let p: any P = S() // 'some P' is an opaque type. let p: some P = S() func f(_ p: any P) {} func f(_ p: some P) {} “Swift 5”də VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsilən edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayan ulduzdu. Keyword xəbərlər any any VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsilən edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayan ulduzdu. VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsilən edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayan ulduzdu. Bir neçə anahtar keliməni anlamaq VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsilən edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayan ulduzdu. some protocol P {} struct S1 : P {} func f() -> some P { return S1() } Burada işləmək lazımdır ki, bir funksiya Bir neçə ildir ki, bu, konkret, konkret bir prosesdir. Əgər funksiya bir çox konformasiya tiplərini qaytarmaya çalışırsa, bu kompilator hatasına səbəb ola bilər, çünki implicit generik yer sahibini bir çox tiplər qəbul edə bilməz. P P struct F1: P {} struct F2: P {} // error: Function declares an opaque return type, but the return // statements in its body do not have matching underlying types. func f(_ value: Bool) -> some P { if value { return F1() } else { return F2() } } Protokollun qaytarılması ilə bağlı açıq-aşkar tiplərin təqdim etdiyi faydalara baxın. Opaque result types can be used with PATs. The main limitation of using protocols is that protocols with associated types cannot be used as actual types. This means that the following code doesn’t compile: func collection() -> Collection { return ["1", "2", "3"] } As for opaque types, they are merely generic placeholders that can be used in such scenarios: // protocol Collection<Element> : Sequence func collection() -> some Collection { return ["1", "2", "3"] } Opaque result types have identity. Because opaque types guarantee that only one type will be returned, the compiler knows that a function must return the same type on several calls: func method() -> some Equatable { return "method" } let x = method() let y = method() print(x == y) // true Opaque result types compose with generic placeholders. Contrary to conventional protocol-typed values, opaque result types integrate effectively with standard generic placeholders. For instance: protocol P { var message: String { get } } struct M: P { var message: String } func makeM() -> some P { return M(message: "message") } func bar<T: P, U: P>(_ p1: T, _ p2: U) -> Bool { return p1.message == p2.message } let m1 = makeM() let m2 = makeM() print(bar(m1, m2)) However, it doesn’t work if make returns different types based on protocol . M() P protocol P { var message: String { get } } struct M: P { var message: String } struct T: P { var message: String } // error: function declares an opaque return type 'some P', but the return statements in its body do not have matching underlying types func makeM() -> some P { if .random() { return M(message: "M message") } else { return T(message: "T message") } } Hər bir anahtar keliməni anlamaq Bir daha baxmalıyıq ki, bizdə bir protokol və bu protokolun iki konkret uygulanması. Drawable protocol Drawable { func draw() } struct Line: Drawable { let x1: Int let y1: Int let x2: Int let y2: Int func draw() { print("Draw Line") } } struct Point: Drawable { let x: Int let y: Int func draw() { print("Point") } } Bizdə iki element var. və Bir variable yaratmaq və bir Objektlər : Line Point Drawable var p1: any Drawable = Line(x1: 0, y1: 0, x2: 5, y2: 5) // 'any Drawable' is an explicit existential type p1.draw() // print "Draw Line" p1 = Point(x: 0, y: 0) p1.draw() // print "Point" Bir neçə ildir ki, bu problemlər həll olunacaq, bir sıra problemlər də həll olunacaq: let array: [any Drawable] = [ Line(x1: 0, y1: 0, x2: 5, y2: 5), Line(x1: 0, y1: 0, x2: 5, y2: 5), Point(x: 0, y: 0) ] Biz bildiyimiz kimi, sabit vaxtda bir matç içində hər bir elementə rast gəlmək mümkündür, çünki hər bir elementin eyni bellek boyuna sahip olmasıdır. print(MemoryLayout<Line>.size) // 32 print(MemoryLayout<Point>.size) // 16 Bu mümkündür, çünki Eksistencial konteyner beş maşın sözünü encapsulates, oxumaq üçün üç və ya bir işarə, bir işarə üçün virtual tablo, və bir işarə üçün şahid tablo adlandırmaq üçün. any Eksistencial konteyner 5 maşın sözünü alır (x64-bit sistemdə, 5 * 8 = 40): Value buffer is a space for the instance VWT is a pointer to Value Witness Table PWT is a pointer to the Protocol Witness Table Protokollun bir qiymətini kodda istifadə etdikdə kompilator eksistensiyal konteyner adlandırdığımız bir kutu yaratır. Bir qiymət üçün bir kutu. Protokollun tipinə uyğun olan hər bir qiymət saxlaya bildikdə və depolanmış qiymətin türü dinamik şəkildə dəyişə bilər, eksistensiyal konteyner 3 maşın sözünün bufrasına daxil olmaq üçün kifayət qədər kiçik olmamışsa, dinamik hafızanın toplanması lazımdır. Heap dağılımı və referans saymasından başqa, eksistensiyal konteynerlərin hər birinin istifadə edilməsi, optimizasiya edilə bilməyən, göstərici indirektliyi və dinamik dağılımı ilə bağlıdır. Üç söz istifadə olunur ki, 3 makine sözünə uyğun gəlsə, ya da 3 makine sözünə uyğun gəlsə, ARC-in idarə etdiyi kutu yaratılır.Onun ardınca, qiyməti kutuya kopyalanır və ARC-in idarə etdiyi kutu üçün bir işarə konteynerin ilk sözünə kopyalanır.Ölkə iki söz istifadə edilmir.Aşağıdaki sözlər qiymət şahidlik tablosunu (VWT) və protokol şahidlik tablosunu (PWT) göstərmək üçün istifadə edilir. VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsilən edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayan ulduzdu. Hər bir protokol üçün bir-iki giriş olacaq.Protokol Şahidlik Tablosu (PWT) var ki, bu tipin protokolu ilə bağlılığını bildirir, biz bir egzistencial konteyner yaratmaq, onu keçirmək və dinamik göndərmək üçün istifadə edə bilərik. P & Q VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsilən edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayan ulduzdu. və və və Hər bir tipin belə bir tablosu var və o, tipin bir istisnası yaratma, qiymətin depolandığı yerə - yığmada, yığmada və s. allocate copy destruct deallocate Artıq, bu konteynerdən keçmək üçün heterogene boyutların keçməsi problemini çözən sabit boyutlu bir konteynerimiz var, və bu konteynerin keçirmək üçün bir yol var. Yaxud, ən azından, protokolda (initializerlər, özəlliklər - depolanan və ya hesablanılan, funksiyalar və abonentlər) müəyyən edilən konteynerdə depolanan qiymətin ehtiyacı olan hissələrini çağırmaq istəyirik. VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsilən edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayan ulduzdu. VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsilən edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayan ulduzdu. VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsilən edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayan ulduzdu. Eksistensiyalların istifadə etmək üçün nisbətən ucuz olduğunu bilmək vacibdir, çünki kompilator və sürət vaxtı eksistensiyalları dolduracaq konkret objekt üçün nə qədər memoriya ayrılmalıdır. Eksistensiyalların istifadə etmək üçün nisbətən ucuz olduğunu bilmək vacibdir, çünki kompilator və sürət vaxtı eksistensiyalları dolduracaq konkret objekt üçün nə qədər memoriya ayrılmalıdır. Sumqayıt Aralarında olan farklılıqları düşünürük. və Bir tərəfdən, bu, generik kodumuzun sintaxını və oxumaqlılığını böyük ölçüde artırdı; digər tərəfdən, bizə generik kodun daha effektiv şəkildə hazırlanması üçün yeni yollar təqdim etdi. some any Okuduğunuz üçün təşəkkür edirəm.