ios - स्विफ्ट में ग्लोबल स्थिरांक फ़ाइल




objective-c swift (7)

मेरे उद्देश्य-सी परियोजनाओं में मैं अक्सर NSUserDefaults लिए अधिसूचना नाम और कुंजी जैसी चीजों को संग्रहीत करने के लिए वैश्विक स्थिरांक फ़ाइल का उपयोग करता हूं। ऐसा कुछ ऐसा दिखता है:

@interface GlobalConstants : NSObject

extern NSString *someNotification;

@end

@implementation GlobalConstants

NSString *someNotification = @"aaaaNotification";

@end

मैं स्विफ्ट में बिल्कुल वही काम कैसे करूं?


Constant.swift

import Foundation

let kBaseURL = NSURL(string: "http://www.example.com/")

ViewController.swift

var manager = AFHTTPRequestOperationManager(baseURL: kBaseURL)

अधिसूचनाओं के लिए आप विस्तार का उपयोग कर सकते हैं, ऐसा कुछ:

extension Notification.Name {
    static let testNotification = "kTestNotification"
}

और इसे NotificationCenter.default.post(name: .testNotification, object: nil) जैसे उपयोग करें


गणना पर विचार करें। इन्हें अलग-अलग उपयोग मामलों के लिए तार्किक रूप से टूटा जा सकता है।

enum UserDefaultsKeys: String {
    case SomeNotification = "aaaaNotification"
    case DeviceToken = "deviceToken"
}

enum PhotoMetaKeys: String {
    case Orientation = "orientation_hv"
    case Size = "size"
    case DateTaken = "date_taken"
}

एक अनूठा लाभ तब होता है जब आपके पास परस्पर अनन्य विकल्प की स्थिति होती है, जैसे कि:

for (key, value) in photoConfigurationFile {
    guard let key = PhotoMetaKeys(rawvalue: key) else {
        continue // invalid key, ignore it
    }
    switch (key) {
    case.Orientation: {
        photo.orientation = value
    }
    case.Size: {
        photo.size = value
    }
    }
}

इस उदाहरण में, आपको एक संकलन त्रुटि प्राप्त होगी क्योंकि आपने PhotoMetaKeys.DateTaken के मामले को संभाला नहीं है।


दूसरों की तरह एक वर्ग के बाहर घोषित कुछ भी उल्लेख है वैश्विक है।

आप सिंगलेट भी बना सकते हैं:

class TestClass {
    static let sharedInstance = TestClass()
    // Anything else goes here
    var number = 0
}

जब भी आप इस कक्षा से कुछ उपयोग करना चाहते हैं तो आप लिखते हैं:

TestClass.sharedInstance.number = 1

यदि अब आप अपनी परियोजना में कहीं से भी println(TestClass.sharedInstance.number) लिखते हैं तो आप लॉग में 1 प्रिंट करेंगे। यह सभी प्रकार के ऑब्जेक्ट्स के लिए काम करता है।

tl; dr: किसी भी समय जब आप क्लास ग्लोबल में सब कुछ बनाना चाहते हैं, static let sharedInstance = YourClassName() को कक्षा में जोड़ें, और उपसर्ग के साथ क्लास के सभी मानों को YourClassName.sharedInstance


या बस GlobalConstants.swift में:

import Foundation

let someNotification = "aaaaNotification"

हालांकि मैं @ फ्रांसेस्को के रास्ते (स्थिर गुणों के साथ एक संरचना का उपयोग कर) पसंद करता हूं, आप वैश्विक स्थिरांक और चर परिभाषित भी कर सकते हैं:

let someNotification = "TEST"

ध्यान दें कि स्थानीय चर / स्थिरांक और वर्ग / संरचना गुणों से भिन्न रूप से, ग्लोबल्स स्पष्ट रूप से आलसी हैं, जिसका अर्थ है कि उन्हें पहली बार उपयोग किए जाने पर प्रारंभ किया जाता है।

सुझाए गए पढ़ने: स्विफ्ट में वैश्विक और स्थानीय चर , और वैश्विक चर भी चर नहीं हैं


रंग की

extension UIColor {
    static var greenLaPalma: UIColor {
        return UIColor(red:0.28, green:0.56, blue:0.22, alpha:1.00)
    }
}

फोंट्स

enum CustomFontType: String {
    case avenirNextRegular = "AvenirNext-Regular",
    avenirDemiBold = "AvenirNext-DemiBold"
}

extension UIFont {
    static func getFont(with type: CustomFontType, size: CGFloat) -> UIFont {
        let font = UIFont(name: type.rawValue, size: size)!

        return font
    }
}

अन्य के लिए - सब कुछ स्वीकृत उत्तर के समान ही है।





swift