سويفت 5.3: ما الجديد؟

مرحباً هبر! تحظى لغة برمجة Swift بشعبية كبيرة نظرًا لاستخدامها في كتابة التطبيقات لنظام iOS ، لذا فإن تطويرها يثير اهتمام جميع المشاركين في هذا المجال.

دعنا نرى ما هو جديد لمطوري Swift الإصدار 5.3.

عمليات إغلاق زائدة متعددة


يقدم الإصدار الجديد ( SE-0279 ) بنية جديدة للإغلاق المحدود الذي يسمح لك باستدعاء عمليات إغلاق متعددة كمعلمات وظيفية بطريقة أكثر قابلية للقراءة. هذا يقلل من استخدام العديد من الأقواس في توقيع الوظيفة.

import Foundation

func load(url: String, success: (Data) -> Void, failure: (Error) -> Void) {
    
}

// old  version

load(url: "someURL", success: { data in }, failure: { error in })

// new multiple trailing closures

load(url: "someURL") { (data) in
    // do smth
} failure: { (error) in
    // do smth
}

باستخدام مثال خيارين للاتصال ، يمكنك رؤية أن الخيار الثاني يبدو أجمل قليلاً.

عبارات الصيد متعددة الأنماط


في الوقت الحالي ، يمكن أن تحتوي كل عبارة التقاط في عبارة do-catch على نمط واحد فقط. لحل هذه المشكلة ، سيستخدم المطورون إمكانات خيارات التبديل لتضمين مطابقة النمط في نص عبارات الالتقاط ، وبالتالي زيادة التعليمات البرمجية المتداخلة والمتكررة ( SE-0276 ).

تسمح عناصر الالتقاط الآن للمستخدم بتحديد قائمة قوالب مفصولة بفواصل مع القدرة على ربط المتغيرات بجسم الالتقاط ، كما هو الحال في التبديل.

enum NetworkError: Error {
    case failure, timeout
}

// old  version
func networkCall(){
  do{
    try someNetworkCall()
  } catch NetworkError.timeout{
    print("timeout")
  } catch NetworkError.failure{
    print("failure")
  }
}

// new multi-Pattern catch clauses
func networkCall(){
  do{
    try someNetworkCall()
  } catch NetworkError.failure, NetworkError.timeout {
    print("handle for both")
  }
}

التوافق المركب المقارن للتعدادات


حتى الآن ، لم تكن مقارنة عنصرين في العد شيئًا "لطيفًا". كان من الضروري المطابقة للمقارنة وكتابة دالة ثابتة <لتحديد ما إذا كانت القيمة الأصلية أقل من أخرى.

الآن يسمح لك Swift ( SE-0266 ) بعدم "التعرق" عند تنفيذ كل هذه الأشياء ، ولا تحتاج إلى تنفيذ البروتوكول بشكل صريح ، طالما أن تعدادك له نفس الأنواع. إذا لم يتم تحديد القيم المقابلة ، سيتم مقارنة القوائم بالترتيب الدلالي للإعلان.

enum Brightness: Comparable {
    case low(Int)
    case medium
    case high
}

([.high, .low(1), .medium, .low(0)] as [Brightness]).sorted()
// [Brightness.low(0), Brightness.low(1), Brightness.medium, Brightness.high]

يمكن تقليل عدد الذات


من الآن فصاعدًا ، يمكن حذف الذات في تلك الأماكن التي لم تعد هناك حاجة إليها ( SE-0269 ). في السابق ، كان استخدام الذات في عمليات الإغلاق ضروريًا عندما التقطنا قيمًا من النطاق الخارجي.

struct OldView: View {

    var body: some View {
        Button(action: {
            self.sayHello()
        }) {
            Text("Press")
        }
    }
    
    func sayHello() {}
}

struct NewView: View {

    var body: some View {
        Button {
            sayHello()
        } label: {
            Text("Press")
        }
    }
    
    func sayHello(){}
}

أين في عام


قدم إصدار جديد من اللغة ( SE-0267 ) القدرة على إرفاق مكان الوظائف داخل الأنواع والإضافات العامة.

struct Stack<Element> {
    private var array = [Element]()

    mutating func push(_ obj: Element) {
        array.append(obj)
    }

    mutating func pop(_ obj: Element) -> Element? {
        array.popLast()
    }
}

extension Stack {
    func sorted() -> [Element] where Element: Comparable {
        array.sorted()
    }
}

يمكنك إضافة طريقة جديدة () مرتبة إلى المكدس ، ولكن فقط لتلك الحالات التي تتوافق فيها العناصر داخل المكدس مع المقارنة.

نوع جديد عائم 16


قدم Float16 نصف نقطة عائمة دقيقة ( SE-0277 ). مع ظهور التعلم الآلي على الأجهزة المحمولة في السنوات الأخيرة ، يشير هذا فقط إلى طموحات Apple للترويج لهذا الموضوع. يشيع استخدام Float 16 في وحدات معالجة الرسوميات المحمولة للحوسبة ونسق مضغوط للمقاييس في تطبيقات ML.

let f16: Float16 = 7.29

قدم Swift 5.3 العديد من التحسينات إلى Swift Package Manager (SPM). اعتبرهم.

  1. تسمح SE-0271 (موارد إدارة الحزم) لـ SPM باحتواء موارد مثل الصور والصوت و JSON والمزيد.
  2. يسمح SE-0272 (التبعيات الثنائية لإدارة الحزم) لـ SPM باستخدام الحزم الثنائية جنبًا إلى جنب مع دعم حزمة المصدر الموجودة. وهذا يعني أنه يمكن الآن دمج حزم SDK المشتركة والمغلقة المصدر مثل Firebase باستخدام SPM.
  3. يسمح لك SE-0273 (تبعيات الهدف الشرطي لإدارة الحزم) بتكوين الأهداف بحيث يكون لها تبعيات لأنظمة أساسية وتكوينات محددة فقط. على سبيل المثال ، يمكنك تعيين أطر عمل إضافية خاصة عند التحويل إلى Linux.
  4. يسمح لك SE-0278 بإضافة موارد مترجمة.

وبالتالي ، يمكن القول أن الإصدار 5.3 قدم بعض الابتكارات الجيدة التي سيتم اختيارها من قبل المطورين.

All Articles