दिलचस्प पोस्ट
स्ट्रिंग लीटरल मेमोरी अपवाद के साथ EPPlus बड़े डेटासेट समस्या पायथन जेेंजो ग्लोबल वैरिएबल मैं एक साधारण पायथन लूप को समानांतर कैसे कर सकता हूं? वास्तव में रूबी में कमांड लाइन विकल्प पार्सिंग जावास्क्रिप्ट के साथ टेक्सटेरा चयन के साथ क्या हो रहा है यह समझना गतिशील रूप से फ़ील्ड में फ़ील्ड जोड़ें जावा में एक सरणी में एक सरणी को बांटने का एक बेहतर तरीका AngularJS में दृश्यों के बीच बदलते समय गुंजाइश के मॉडल को बनाए रखें क्या System.nanoTime () पूरी तरह बेकार है? PHP और jquery का उपयोग करते हुए साधारण धूमकेतु उदाहरण PHP को बहुआयामी सरणी से डुप्लिकेट मान हटाएं MySQL: कई तालिकाओं या कई डेटाबेस? स्थिर-आकार के हिस्सेों में एक आवेश को कैसे विभाजित किया जाए हैलो एंड्रॉइड] एमुलेटर -5554 डिस्कनेक्ट! 'Com.example.helloandroid.HelloAndroid गतिविधि लॉन्च' रद्द कर रहा है!

उद्देश्य-सी से स्विफ्ट प्रकार की संपत्ति तक नहीं पहुंच सकते

मैं उद्देश्य सी क्लास से तेज गति के एक var को लागू करने की कोशिश कर रहा हूं। मैं नीचे की तरह क्या कर रहा हूं:

स्विफ्ट क्लास

class BusinessDetailViewController: UIViewController { var lat : Double? var lon : Double? @IBOutlet var mapView: MKMapView? override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) { super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) // Here you can init your properties } required init(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } } 

ViewController.m पर, मैं निम्न की तरह lat को प्रारंभ करने का प्रयास कर रहा हूं:

 #import "i5km-Swift.h" @interface ViewController () @property (strong, nonatomic) BusinessDetailViewController *businessDetailViewController; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. self.businessDetailViewController = [[BusinessDetailViewController alloc] initWithNibName:@"BusinessDetailViewController" bundle:nil]; self.businessDetailViewController.lat = businessArray[1]; /* THIS GIVES ME AN ERROR */ } 

और मैं मिल रहा हूं

 Property 'lat' not found on object of type 'BusinessDetailViewController *' 

कोई भी विचार है कि मैं क्यों नहीं एक्सेस कर सकता हूं या मुझे कुछ और याद आ रही है

Solutions Collecting From Web of "उद्देश्य-सी से स्विफ्ट प्रकार की संपत्ति तक नहीं पहुंच सकते"

गैर- Objective-C प्रकारों के वैकल्पिक मान को उद्देश्य- C में नहीं तोड़ दिया जाता है यही है, नीचे TestClass के पहले तीन गुण उद्देश्य-सी में उपलब्ध होंगे , लेकिन चौथा नहीं होगा:

 class TestClass: NSObject { var nsNumberVar: NSNumber = 0 // obj-c type, ok var nsNumberOpt: NSNumber? // optional obj-c type, ok var doubleVar: Double = 0 // bridged Swift-native type, ok var doubleOpt: Double? // not bridged, inaccessible } 

आपके उद्देश्य- C कोड में, आप इस तरह से पहले तीन गुणों का उपयोग कर सकते हैं:

 TestClass *optTest = [[TestClass alloc] init]; optTest.nsNumberOpt = @1.0; optTest.nsNumberVar = @2.0; optTest.doubleVar = 3.0; 

आपके मामले में, आप या तो lat बदल सकते हैं और long से गैर-वैकल्पिक हो सकते हैं या उन्हें NSNumber उदाहरण होने पर स्विच कर सकते हैं।


ध्यान दें कि आपको अपने उद्देश्य-सी कोड के बारे में सावधान रहने की जरूरत है अगर आप दूसरे दृष्टिकोण ( lat और lat को गैर-वैकल्पिक प्रकार के NSNumber प्रकार में स्विच करना) लेते हैं – जबकि स्विफ्ट कंपाइलर आपको nil को गैर-वैकल्पिक गुणों को निर्दिष्ट करने से रोकेगा , उद्देश्य-सी संकलक को यह अनुमति देने के बारे में कोई गुंजाइश नहीं है, जिससे कि nil मूल्यों को आपके स्विफ्ट कोड में घुसकर रनटाइम पर पकड़ने की कोई संभावना न हो। TestClass पर इस पद्धति पर विचार करें:

 extension TestClass { func badIdea() { // print the string value if it exists, or 'nil' otherwise println(nsNumberOpt?.stringValue ?? "nil") // non-optional: must have a value, right? println(nsNumberVar.stringValue) } } 

यह ठीक काम करता है यदि दोनों गुणों में मानों के साथ लागू होता है, लेकिन यदि nsNumberVar को उद्देश्य-सी कोड से nil सेट किया गया है, तो यह रनटाइम पर क्रैश हो जाएगा। ध्यान दें कि इसका उपयोग करने से पहले nsNumberVar nil है या नहीं, यह nsNumberVar का कोई तरीका नहीं है!

 TestClass *optTest = [[TestClass alloc] init]; optTest.nsNumberOpt = @1.0; optTest.nsNumberVar = @2.0; [optTest badIdea]; // prints 1, 2 optTest.nsNumberOpt = nil; optTest.nsNumberVar = nil; [optTest badIdea]; // prints nil, then crashes with an EXC_BAD_ACCESS exception 

यदि आपकी प्रॉपर्टी एक स्विफ्ट प्रोटोकॉल प्रकार है, तो इसके सामने @objc जोड़ें।

उदाहरण:

 class Foo: UIViewController { var delegate: FooDelegate? ... } @objc protocol FooDelegate { func bar() } 

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

मुझे नहीं पता कि क्या कोई समाधान है – एक संभावित समाधान गैर-रहित गुणों को एक अप्रयुक्त डेटा प्रकार मान (जैसे -1 जब एक सूचकांक का प्रतिनिधित्व करता है, या समन्वय के लिए 999999) को nil मान को मानचित्रण करता है:

 class Test { var lat : Double? { didSet { self._lat = self.lat != nil ? self.lat! : 999999 } } var lon : Double? { didSet { self._lon = self.lon != nil ? self.lon! : 999999 } } var _lat: Double = 99999999 var _lon: Double = 99999999 } 

_lat और _lon गुणों को obj-c को उजागर करना चाहिए

ध्यान दें कि मैंने कभी ऐसा नहीं किया है, इसलिए कृपया हमें बताएं कि यह काम करता है या नहीं।