2015-06-04 9 views
35

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

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

एक अलग स्विफ्ट फ़ाइल बनाएं और इस तरह के सभी कार्यों को उसमें रखें। आप इसे पूरे कोड में उपयोग कर सकते हैं। – Kapil

उत्तर

57

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

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

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

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

+0

धन्यवाद! तो बस इसे नामकरण Helper.swift ठीक अभ्यास होगा? –

+4

मेरे पास आमतौर पर कई सहायक होते हैं इसलिए मेरे पास एनीमेशन हैल्पर.swift, CoreDataHelper.swift और इसी तरह, नौकरी से अलग अपने सहायक कक्षाओं को तोड़ने का प्रयास करें, यह – Icaro

+0

होगा func postRequest() को एक स्थिर func postRequest() क्रम में होना चाहिए Helper.postRequest() का उपयोग करके इसे कॉल करने के लिए? xCode मुझे इतना बता रहा है। –

2

मैं आमतौर पर एक अलग वर्ग बनाता हूं यदि मेरे पास ऐसे कार्य हैं जिनका उपयोग कई वर्गों द्वारा किया जाएगा, खासकर नेटवर्क संचालन वाले लोगों के लिए।

तुम सिर्फ अलग कार्यों कि उपयोग किया जाएगा है, तो आप बस उस वर्ग के भीतर स्थिर कार्यों बना सकते हैं जिससे यह आसानी से एक स्थिर रास्ते में अन्य वर्गों से पहुँचा जा सकता है:

class DataController { 
    static func getData() -> [String:String] { 
     // do some operations 
     return ["someData" : "someData"] 
    } 
} 

let data = DataController.getData() // example 

हालांकि, जो अक्सर किया गया है मेरे लिए मामला (विशेष रूप से यदि इसमें अधिक जटिल परिचालन शामिल हैं) यह था कि इन नेटवर्क संचालनों को पहले से प्रारंभिक कनेक्शन स्थापित करने या कुछ आरंभिक सेटअप की आवश्यकता होती थी, और उन्होंने नियंत्रित करने के लिए आवश्यक असीमित संचालन भी किया। यदि यह मामला है और आप अक्सर ऐसी विधियों को बुलाएंगे, तो आप एक सिंगलटन ऑब्जेक्ट बनाना चाहते हैं जिसे आप विभिन्न वर्गों और कार्यों में उपयोग कर सकते हैं। इस तरह, आप प्रारंभिक सेटअप कर सकते हैं या केवल एक बार प्रारंभिक कनेक्शन स्थापित कर सकते हैं, और फिर बाकी कार्यों के साथ बाकी की तरह कार्य करें, जब भी फ़ंक्शन को कॉल किया जाता है।

एक सिंगलटन वस्तु बनाना स्विफ्ट में बहुत सरल है:

class DataController { 
    static let sharedInstance = DataController() // singleton object 

    init() { 
     // do initial setup or establish an initial connection 
    } 

    func getData() -> [String:String] { 
     // do some operations 
     return ["someData" : "someData"] 
    } 
} 

let data = DataController.sharedInstance.getData() // example 

क्लास के नाम के लिए, मैं आम तौर पर यह DataController या DataHelper जैसा कोई नाम है, लेकिन कुछ भी है कि एक "सहायक" वर्ग के रूप में समझ में आता है होगा काम।

आशा इस मदद करता है :)

3

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

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] 
    } 
} 
+0

यह बहुत अच्छा लगता है। क्या आपके पास नमूना नमूना ऐप है? मैं एक नौसिखिया हूँ और इससे मुझे बहुत मदद मिलेगी। – bruno

0

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

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

संबंधित मुद्दे