2015-10-08 4 views
6

का उपयोग कर जेएसओएन को स्विफ्ट क्लास को सीरियलाइज करना IOS के लिए बहुत नया है, एंड्रॉइड डेवलपमेंट से आगे बढ़ रहा हूं।जे 2 ओबीजेसी और जीएसओएन लाइब्रेरी

हम आपको एक Android आवेदन जो कई पुस्तकालयों जो हम J2ObjC उपयोग कर रहे हैं उद्देश्य सी

में अनुवाद करने मैं धीरे-धीरे पुस्तकालयों लाने किया गया है और अब तक, तो अच्छा है की है।

let gson = ComGoogleGsonGson() 
    let swiftTest = GsonSwiftTest() 
    swiftTest.name = "Ricky" 
    print(gson.toJsonWithId(swiftTest)) 

मैं निम्न त्रुटि प्राप्त:

libc++abi.dylib: terminating with uncaught exception of type JavaLangAssertionError

हालांकि, गूगल के GSON पुस्तकालय के अनुवाद के बाद मैं एक मुद्दा जहां अगर मैं कोशिश करते हैं और अनुवाद विधि toJsonWithId का उपयोग मैं समस्याओं आ जाती है, इसके अलावा यह दिखाता है:

Terminating app due to uncaught exception 'JavaLangAssertionError', reason: 'unknown Java type encoding'

मेरा स्विफ्ट क्लास है:

import Foundation 

@objc 
public class GsonSwiftTest : NSObject { 

    var name:String? 

} 

अगर मैं बजाय, मेरे स्विफ्ट परियोजना में एक उद्देश्य सी क्लास का उपयोग ब्रिजिंग हैडर में जोड़ने और उद्देश्य सी क्लास यह ठीक काम करता है का उपयोग करें।

मेरा मानना ​​है कि यह मेरे हिस्से पर एक गलतफहमी है, लेकिन मुझे जवाब नहीं मिल रहा है कि यह क्यों काम नहीं करेगा। J2ObjC स्रोत कोड की जांच करने से पता चलता है कि कक्षा के प्रकार को नहीं मिला जब त्रुटि उत्पन्न की जा सकती है।

यदि कोई इस मुद्दे के कारणों की व्याख्या करने में मदद कर सकता है, तो इसकी सराहना की जाएगी।

धन्यवाद!

उत्तर

4

स्विफ्ट उदाहरणों को क्रमबद्ध करने का एक आसान तरीका है: फाउंडेशन क्लास NSJSONSerialization का उपयोग सीधे करें। यहां एक प्रासंगिक ब्लॉग पोस्टिंग है: JSON Serialization in Swift

स्विफ्ट में आपका परीक्षण विफल होने का कारण यह है कि सभी स्विफ्ट वर्ग एनएसओब्जेक्ट का विस्तार नहीं करते हैं, जो j2objc java.lang.Object को मानचित्र करता है। सभी जावा धारावाहिक ढांचे का मानना ​​है कि सभी कक्षाएं ऑब्जेक्ट का विस्तार करती हैं, जैसे वे जावा में करते हैं।

एक क्रॉस-प्लेटफार्म एपीआई के लिए, मैं एक सरल धारावाहिक/अनिश्चित इंटरफ़ेस बनाने की अनुशंसा करता हूं, फिर इसे GSON का उपयोग करके एंड्रॉइड के लिए एक बार लागू करें, और एक बार मूल रूप से NSJSONSerialization का उपयोग करके इसे लागू करें। स्विफ्ट तेजी से विकसित हो रहा है, इसलिए यदि बेहतर सीरियलाइजेशन तंत्र उपलब्ध हो जाता है, तो आपकी परियोजना एंड्रॉइड पोर्ट को प्रभावित किए बिना आसानी से इसका लाभ उठा सकती है।

+1

धन्यवाद टॉम, मुझे NSJSONSerialization के बारे में पता था, मैं बस विफलता के तर्क को समझना चाहता था, जिसे आपने अभी समझाया है। लाइब्रेरी पर आपके कड़ी मेहनत के लिए धन्यवाद। – Ricky