亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Swift與Object-C交互(Swift版本為:1.2)

2019-11-14 18:56:08
字體:
來源:轉載
供稿:網友

這篇文章主要是介紹 Swift 與 Object-C 之間進行交互的代碼,主要分為兩個部分。一個是 Swift 項目調用 Object-C 的類,另一個是 Object-C 項目調用 Swift 類。過程是很簡單,但是對于沒接觸過的人來說,還是存在一點難度的。

 

你可以在 GitHub 上下載此文章相關的源代碼:Swift-Objective-C-Mutual(https://github.com/GarveyCalvin/Swift-Objective-C-Mutual)

 

一、Swift 調用 Object-C

現在來說說正題吧,目的是“使用 Swift 調用 Object-C” ,那么我們先來準備一下。我們需要驗證以下問題:

1.如何調用 Object-C 的類方法;

2.如何調用 Object-C 的實例方法;

3.如何訪問 Object-C 的屬性

 

我們新建一個 Swift 項目,項目新建完成后,添加 Person 類,添加的語言為 Object-C 。

 

點擊 Next 后會有一個彈窗,詢問你是否需要建立一個橋接,就是與 Object-C 連接的一個橋梁。它會幫我們建立一個頭文件,命名方式為“項目名稱-Bridging-Header.h”,當然這里我們選 Yes。

 

我們的結構目錄變成這樣,我這里新建的橋接文件名為“SwiftCallObject-C-Bridging-Header.h”。

 

這個文件建好以后,是沒有自動幫我們導入頭文件的,因此我們需要導入需要被調用的 Object-C 類頭文件,這樣我們的 Swift 才能正確地調用 Object-C。

////  Use this file to import your target's public headers that you would like to expose to Swift.//#import "Person.h"

 

 我們來看看 Person 類的代碼,這個類寶義了一個 name 的屬性,和一個 PRint 實例方法,還有一個 personWithName: 方法,主要是示范給你們如何調用這些。先來看 Person.h 。

////  Person.h//  SwiftCallObject-C////  Created by baijiawei on 15/5/14.//  Copyright (c) 2015年 GarveyCalvin. All rights reserved.//#import <Foundation/Foundation.h>@interface Person : NSObject@property (strong, nonatomic) NSString *name;- (void)print;+ (id)personWithName:(NSString *)name;@end

  

Person.m 。

////  Person.m//  SwiftCallObject-C////  Created by baijiawei on 15/5/14.//  Copyright (c) 2015年 GarveyCalvin. All rights reserved.//#import "Person.h"@implementation Person- (void)print{    NSLog(@"name is %@", self.name);}+ (id)personWithName:(NSString *)name{    Person *person = [[Person alloc] init];    person.name = name;    return person;}@end

  

調用方法如下。

var person = Person() // 實例化對象person.name = "Garvey" // 訪問對象屬性person.print() // 調用對象方法var personC = Person.personWithName("Calvin") as! Person // 調用 Person 的類方法,返回一個它的實例personC.print() // 調用對象方法

 

 

 

二、Object-C 調用 Swift

同樣的,我們需要創建一個 Object-C 的項目,然后創建 Swift 的類。我們先來創建 Person 類。

 

如果你是第在 Object-C 項目里第一次創建 Swift 的類,那么依舊會有窗口提示,詢問你是否需要創建橋接文件。然而這里有一個問題,如果你選擇 NO ,意思就是不創建橋接文件,那么它將不會默認幫你生成對應的調用代碼; 如果你選擇 Yes, 那么它將默認幫你生成對應的調用代碼。那么具體是什么意思呢?。

 

現在先來看一下 Person 類的代碼,很簡單,只有一個方法和一個屬性。

////  Person.swift//  Object_CCallSwift////  Created by baijiawei on 15/5/17.//  Copyright (c) 2015年 GarveyCalvin. All rights reserved.//import Cocoa@objc class Person: NSObject {    var name: String?        func print() {        println("person name is /(name)")    }}

注意:Object-C 代用的 Swift 代碼,Swift 類在 class 前需要添加關鍵字@“@objc”,否則,Xcode將不會為你維護頭文件。

 

這里先說明一下,在 Object-C 中調用 Swift 時,Xcode 會幫助我們自動生成頭文件,不需要我們去維護。然而這里有一個前提,你必須創建好橋接文件,否則...。

 

當我們需要使用時,引入的文件名為“工程名稱-Swift.h”。

#import "Object_CCallSwift-Swift.h"

 

引入后我們就可以點擊頭文件,剛剛提及過頭文件幾次了,現在我們來看看頭文件的代碼,只截取關鍵部分。

我們可以看到有 Person 類的相關代碼,風格是 Object-C ,應該是 Xcode 為我們轉碼了。謹記,在 Object-C 調用 Swift 端代碼時,Swift 類的 class 前需要加“@objc”關鍵字。 

 

常見問題

引入頭文件時出錯

網上的 Object-C 項目調用 Object-C 代碼會遇到的問題,現在網上熱門的文章,絕大部分都是存在錯誤的,只要你不夠細心,你就很有可能被“入網”。

 

例如是這篇文章:http://www.ituring.com.cn/tupubarticle/2687。該文章錯誤點,#import "工程名-swift.h":

錯在 HelloWorld-swift.h ,其中 swift 的 開頭字母 S 必須是大寫的!我就是因為這個原因,找了好久都沒發現到,也是因為太過于相信網上的文章緣故吧(這里我不是在怪作者)?;蛟S是 Xcode 更新后或是 Swift 語言更新后所作的改動吧,所以才會導致這個原因。

 

有一個辦法可以確認你的橋接文件全稱,在項目的設置里可以看到:

可以很清晰地看見,正確的寫法是“工程名-Swift.h”,只要把這個填對了,后面的調用就簡單多了。

 

 

 


 

博文作者:GarveyCalvin

博文出處:http://www.49028c.com/GarveyCalvin/

本文版權歸作者和博客園共有,歡迎轉載,但須保留此段聲明,并給出原文鏈接,謝謝合作!

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一区二区三区回区在观看免费视频| 黄色成人在线免费| 欧美综合一区第一页| 欧美丝袜一区二区三区| 欧美视频二区36p| 久久久精品久久久久| 成人有码视频在线播放| 久99久在线视频| 96sao精品视频在线观看| 日韩成人在线播放| 97精品一区二区视频在线观看| 久久成人国产精品| 中文字幕亚洲一区二区三区| 亚洲天堂久久av| 黄网站色欧美视频| 国产精品亚洲自拍| 欧洲亚洲免费在线| 日韩一级裸体免费视频| 久久夜色撩人精品| 日韩欧美在线视频免费观看| 亚洲欧美国产制服动漫| 91麻豆国产语对白在线观看| 国产一区二区动漫| 欧美亚洲视频在线观看| yw.139尤物在线精品视频| 欧美视频在线视频| 国产精品久久久久久久久借妻| 欧美性猛交99久久久久99按摩| 欧美在线不卡区| 中文国产成人精品久久一| 亚洲天堂久久av| 红桃av永久久久| 九九九久久国产免费| 亚洲欧美色图片| 国产日韩中文在线| yw.139尤物在线精品视频| 日韩av网站大全| 夜夜嗨av一区二区三区免费区| 欧美高清理论片| 最新国产精品亚洲| 国产精品久久77777| 国产亚洲精品久久久久久777| 欧美精品九九久久| 欧美日韩福利电影| 亚洲一区二区久久久| 亚洲天堂网站在线观看视频| 日韩中文字幕在线| 亚洲精品美女在线观看播放| 午夜剧场成人观在线视频免费观看| 热久久美女精品天天吊色| 国产精品美女免费看| 色噜噜亚洲精品中文字幕| 欧美一级淫片丝袜脚交| 国产精品1区2区在线观看| 91系列在线观看| 日韩免费不卡av| 亚洲精品永久免费| 九九九久久久久久| 欧美激情一区二区三区高清视频| 亚洲国产一区二区三区四区| 欧美性视频在线| 亚洲女在线观看| 国产精品va在线播放我和闺蜜| 欧美一级电影免费在线观看| 日韩福利伦理影院免费| 97在线视频观看| 亚洲精品美女在线观看播放| 欧美又大又粗又长| 在线观看成人黄色| 欧美人在线视频| 欧美在线视频免费观看| 久久久亚洲天堂| 午夜精品一区二区三区在线视| 国产成人avxxxxx在线看| 国产精品一区二区久久久| 久久综合久久美利坚合众国| 综合欧美国产视频二区| 亚洲午夜久久久影院| 精品国产一区二区三区久久久| 国产精品一区二区久久久久| 在线播放日韩精品| 日韩成人免费视频| 亚洲一区二区三区久久| 高清在线视频日韩欧美| 青草青草久热精品视频在线观看| 欧美猛少妇色xxxxx| 91久久精品国产91久久| 色七七影院综合| 78m国产成人精品视频| 亚洲国产成人一区| 久久精品久久久久电影| 国产在线播放不卡| 午夜精品久久久久久久男人的天堂| 性色av一区二区三区红粉影视| 亚洲精品久久久久久下一站| 国产精品白嫩初高中害羞小美女| 成人h视频在线观看播放| 免费成人高清视频| 成人情趣片在线观看免费| 欧美久久精品午夜青青大伊人| 久久久久久美女| xvideos亚洲人网站| 欧美性猛交xxxx偷拍洗澡| 中文字幕av一区二区| 尤物99国产成人精品视频| 成人在线免费观看视视频| 911国产网站尤物在线观看| 国产精品吊钟奶在线| 亚洲精品短视频| 国产偷国产偷亚洲清高网站| 亚洲va欧美va国产综合久久| 国产亚洲精品日韩| 91在线无精精品一区二区| 国内精品久久久久久久| 欧美国产日韩免费| 久久理论片午夜琪琪电影网| 国产91露脸中文字幕在线| 久久久久久伊人| 国产成人亚洲综合青青| 欧美大片免费看| 国产亚洲欧美另类中文| 国产伦精品一区二区三区精品视频| 怡红院精品视频| 亚洲另类xxxx| 66m—66摸成人免费视频| 91高清视频在线免费观看| 国产精品成人在线| 久久97精品久久久久久久不卡| 韩国19禁主播vip福利视频| 国产视频亚洲视频| 欧美肥老太性生活视频| 久久久之久亚州精品露出| 亚洲亚裔videos黑人hd| 亚洲另类欧美自拍| 69久久夜色精品国产7777| 国产欧美日韩综合精品| 国产精品一区二区电影| 欧美日韩国产二区| 日韩中文字幕亚洲| 日韩精品视频免费专区在线播放| 国语自产精品视频在线看一大j8| 久久av在线看| 亚洲综合av影视| 日韩天堂在线视频| 日本精品免费观看| 亚洲国产精品成人va在线观看| 国产999精品视频| 日韩av资源在线播放| 国产欧美日韩精品丝袜高跟鞋| 欧美亚洲成人xxx| 久久免费成人精品视频| 精品动漫一区二区| 亚洲高清一二三区| 超薄丝袜一区二区| 国产日韩换脸av一区在线观看| 欧美性猛交xxxx免费看漫画| 精品香蕉一区二区三区| 在线精品国产成人综合| 久久精品免费播放| 成人疯狂猛交xxx| 欧美精品xxx| 成人伊人精品色xxxx视频| 日韩性xxxx爱| 日韩av电影在线网|