ios - आईओएस स्विफ्ट में पुन: प्रयोज्य कार्यों को कहां रखा जाए?




swift (4)

आप एक अलग स्विफ्ट क्लास बना सकते हैं, इसे WebServicesManager.swift नाम दे सकते हैं, और इसमें वेब अनुरोधों से संबंधित सभी तरीके लिख सकते हैं।

विधियों का उपयोग करने के लिए आप वर्ग विधियों, या सिंगलटन पैटर्न का उपयोग कर सकते हैं।

IOS प्रोग्रामिंग के लिए नया है, लेकिन सिर्फ यह सोचकर कि मैं अपने कोड में उपयोग किए जाने वाले कार्यों को लगाने के लिए सबसे अच्छी जगह कहां हूं उदाहरण के लिए, मैं एक वेब सेवा के लिए एक POST अनुरोध करने और एक शब्दकोश वापस करने के लिए कुछ फ़ंक्शन लिखना चाहता हूं। शायद कुछ गणना करने के लिए एक और कार्य। क्या एक और .swift फ़ाइल बनाना और वहाँ मेरे सभी कार्य करना सर्वोत्तम है। और यदि फ़ाइल को देना हो तो क्या एक अच्छा नाम होगा?

public func postRequest() -> [String:String] {
     // do a post request and return post data
     return ["someData" : "someData"]
}

पुन: प्रयोज्य कार्यों के लिए यह निर्भर करता है कि मैं क्या उपयोग करने का निर्णय लेता हूं। इस विशिष्ट मामले के लिए मैं एक अलग फ़ाइल का उपयोग करता हूं, क्योंकि बैकएंड पर पोस्ट करने पर एप्लिकेशन विकसित होने पर अधिक जटिल हो जाएगा। मेरे एप्लिकेशन में मैं सभी प्रकार के सहायक वर्गों के साथ एक बैकएंड वर्ग का उपयोग करता हूं:

struct BackendError {
    var message : String
}

struct SuccessCall {
    var json : JSON

    var containsError : Bool {
        if let error = json["error"].string {
            return true
        }
        else {
            return false
        }

    }
}

typealias FailureBlock  = (BackendError) -> Void
typealias SuccessBlock  = (SuccessCall) -> Void

typealias AlamoFireRequest = (path: String, method: Alamofire.Method, data: [String:String]) -> Request
typealias GetFunction = (path: String , data: [String : String], failureBlock: FailureBlock, successBlock: SuccessBlock) -> Void

class Backend {
   func getRequestToBackend (token: String )(path: String , data: [String : String], failureBlock: FailureBlock, successBlock: 

}

अन्य मामलों के लिए मैं अक्सर स्विफ्ट कक्षाओं पर एक्सटेंशन का उपयोग करता हूं। जैसे एक ऐरे से यादृच्छिक तत्व प्राप्त करना।

extension Array {
    func sampleItem() -> T {
        let index = Int(arc4random_uniform(UInt32(self.count)))
        return self[index]
    }
}

यह बहुत पुराना प्रश्न है, लेकिन मैं कुछ और बिंदुओं पर चर्चा करना चाहूंगा। कुछ विकल्प हैं, मूल रूप से आप स्विफ्ट में अपने उपयोगिता कार्यों को लिख सकते हैं -

स्थिर समारोह के साथ एक वर्ग। उदाहरण के लिए

class CommonUtility {
      static func someTask() {
      }    
}
// uses
CommonUtility.someTask()

साथ ही, आपके पास स्थैतिक विधि के बजाय वर्ग विधि हो सकती है, लेकिन उन कार्यों को स्थैतिक कार्यों के विपरीत उपवर्गों द्वारा ओवरराइड किया जा सकता है।

class CommonUtility {
      class func someTask() {
      }    
}
// uses
CommonUtility.someTask()

दूसरे, आपके पास ग्लोबल फ़ंक्शंस भी हो सकते हैं, जो किसी भी वर्ग का हिस्सा नहीं हैं और आपके ऐप से सिर्फ नाम से कहीं भी पहुँचा जा सकता है।

func someTask() {
} 

हालाँकि, दूसरे पर एक का चयन करना बहुत ही व्यक्तिपरक होता है और मुझे लगता है कि इस विशेष मामले में static कार्य के साथ एक वर्ग बनाना ठीक है, जहाँ आपको नेटवर्किंग कार्यक्षमता को प्राप्त करने की आवश्यकता है, लेकिन यदि आपके पास कुछ कार्य हैं जो Global फ़ंक्शन की तुलना में केवल एक ही कार्य करते हैं जाने के लिए रास्ता क्योंकि Global फ़ंक्शन अधिक मॉड्यूलर हैं और एकल फ़ंक्शन के लिए एकल कार्यों को अलग करते हैं।

static कार्यों के मामले में, यदि हम किसी एक स्थिर सदस्य तक पहुँचते हैं, तो पूरी कक्षा मेमोरी में लोड हो जाती है। लेकिन वैश्विक कार्य के मामले में, केवल उस विशेष समारोह को मेम में लोड किया जाएगा


सबसे अच्छा तरीका है, स्थैतिक कार्यों के साथ एक सहायक वर्ग बनाना, जैसे:

class Helper{
    static func postRequest() -> [String:String] {
         // do a post request and return post data
         return ["someData" : "someData"]
    }
}

अब हर बार जब आप का उपयोग करने की जरूरत है postRequest आप बस का उपयोग कर सकते हैं: Helper.postRequest()

मुझे उम्मीद है कि उससे आप मदद मिलती है!







swift