iOS UMeng OC和Swift混編

ZY_FlyWay發表於2018-03-27

iOS UMeng OC和Swift混編

Swift呼叫Objective-C需要建立一個橋接標頭檔案進行互動

新建橋接標頭檔案

本例橋接檔案命名為:UMengDemo-Bridging-Header.h

設定Objective-C橋接檔案

匯入SDK標頭檔案

UMengDemo-Bridging-Header.h中加入U-Share SDK標頭檔案:


//匯入UMCommon的OC的標頭檔案
#import <UMCommon/UMCommon.h>

//匯入UShare的OC的標頭檔案
#import <UMSocialCore/UMSocialCore.h>
#import <UShareUI/UShareUI.h>

//匯入UMAnalytics的OC的標頭檔案
#import <UMAnalytics/DplusMobClick.h>
#import <UMAnalytics/MobClick.h>
#import <UMAnalytics/MobClickGameAnalytics.h>

//匯入UMPush的OC的標頭檔案
#import <UMPush/UMessage.h>

UMengDemo的OC和Swift的切換

UMengDemo是用OC的程式碼編寫的,同時也相容了swift3.0的呼叫示例(UMengDemo不再對swift2.0做示例相容).

swift資料夾的結構

swift3.0原始檔結構

檔名功能說明如下:

  1. UMSocialSDK-Bridging-Header.h 為swift3.0的橋接檔案,主要是在swift3.0中,呼叫oc的程式碼。
  1. UMShareSwiftInterface.swift 為社會化分享Swift3.0的介面檔案,主要是為了展示使用者讓oc呼叫swift3.0的程式碼的示例(使用者可以在swift3.0的工程中直接呼叫對應的swift介面)。 備註:UMSocialSwiftInterface.swift這個檔案是單獨分享工程Demo用的swift檔案,現在只是換了一個類名而已,請使用者知曉。
  1. UMAnalyticsSwiftInterface.swift 為統計SDK的Swift3.0的介面檔案和OC的API一一對應。
  1. UMGameAnalyticsSwiftInterface.swift 為遊戲統計SDK的Swift3.0的介面檔案和OC的API一一對應。
  1. UMDplusMobClickSwiftInterface.swift 為Dplus的統計SDK的Swift3.0的介面檔案和OC的API一一對應。
  1. UMessageSwiftInterface.swift 為PushSdk的Swift3.0的介面檔案和OC的API一一對應。
  1. UMCommonSwiftInterface.swift 為Common元件的Swift3.0的介面檔案和OC的API一一對應。

設定切換swift的巨集

swift3.0巨集設定

引入對應的swift的標頭檔案,並在OC中呼叫swift3.0的程式碼如下

程式碼如下


#ifdef UM_Swift
#import "UMengDemo-Swift.h"
#endif

//分享文字
- (void)shareTextToPlatformType:(UMSocialPlatformType)platformType
{
    //建立分享訊息物件
    UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
    //設定文字
    messageObject.text = UMS_Text;
    
#ifdef UM_Swift
    [UMSocialSwiftInterface shareWithPlattype:platformType messageObject:messageObject viewController:self completion:^(UMSocialShareResponse * data, NSError * error) {
#else
        //呼叫分享介面
        [[UMSocialManager defaultManager] shareToPlatform:platformType messageObject:messageObject currentViewController:self completion:^(id data, NSError *error) {
#endif
            if (error) {
                UMSocialLogInfo(@"************Share fail with error %@*********",error);
            }else{
                if ([data isKindOfClass:[UMSocialShareResponse class]]) {
                    UMSocialShareResponse *resp = data;
                    //分享結果訊息
                    UMSocialLogInfo(@"response message is %@",resp.message);
                    //第三方原始返回的資料
                    UMSocialLogInfo(@"response originalResponse data is %@",resp.originalResponse);
                    
                }else{
                    UMSocialLogInfo(@"response data is %@",data);
                }
            }
            [self alertWithError:error];
        }];
}

注意事項如下:

  1. UMengDemo-Swift.h 是工程自動為OC呼叫swift生成的,如果在新建的工程中應該是 $(TARGET_NAME)-Swift.h ,$(TARGET_NAME)為你的工程預設配置的名字

  2. UMengDemo需要xcode8下開啟,因為裡面引入了swift3.0的檔案,不然會編譯出錯(如果不需要swift3.0,直接執行OC的程式碼,可以去掉對應巨集 UM_Swift 和工程裡面對應的 UMSwift3.0資料夾 即可編譯通過)。

相關文章