2016-01-07 11:01:04 RoyUpping_ 阅读数 411
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

    这是一门快速入门iOS开发的课程,目的是让大家快速学会,iOS开发环境搭建,和iOS一些基础知识,最后完成一个小项目。 项目信息 提供完整的Git提交历史,和每节视频一一对应,目前有41次提交,355行注释,271行代码(不包含可视化布局文件,纯Swift和Objective-C代码)。

    2848 人正在学习 去看看 任苹蜻
  1. 在项目中右键添加一个swift文件,我添加的LearnSwift.swift
  2. 添加后Xcode弹出‘是否配置oc桥接头文件’的提示,点确认,系统自动生成一个项目名-Bridging-Header.h的文件,我的是LearnSwift-Bridging-Header.h
    配置oc桥接头文件的提示
  3. LearnSwift-Bridging-Header.h实质上是一个供swift使用的头文件,在这里把所有要暴露给swift的oc头文件都添加进去,这样写swift的时候就可以直接使用那些oc的类和方法了。
    因为swift本身没有头文件,只有.swift;而oc有.h和.m文件。有了这个声明,.swift就可以直接使用oc的.h了
    我的<code>LearnSwift-Bridging-Header.h</code>文件内容
  4. 接下来就可以直接在LearnSwift.swift中写swift代码啦 ~ 随便声明一个类,打些log:
    我的<code>LearnSwift.swift</code>文件内容
    编译直接通过,这就是在swift中使用oc类和方法了,一切顺利!
  5. 在oc中使用swift,我在AppDelegate.m中使用刚才创建的swift类,那么先要引用swift头文件,即#import "LearnSwift-Swift.h",然后在这个.m文件中就可以任意使用swift创建的类和方法了:
    LearnSwift *learnSwift = [[LearnSwift alloc] init];
    [learnSwift logsth:@"code from oc"];

    编译运行直接过! 输出:
    this is a log from swift : code from oc
  6. 理解下#import "LearnSwift-Swift.h"
    其实是项目名-Swift.h,这也是Xcode自动生成的,根据你写的所有swift代码,生成一个oc的.h文件,进行类和方法的声明,这样在oc里引用这个头文件后,就相当于引用了所有swift声明,可以直接使用了。
2018-06-29 19:33:51 wa172126691 阅读数 1285
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

    这是一门快速入门iOS开发的课程,目的是让大家快速学会,iOS开发环境搭建,和iOS一些基础知识,最后完成一个小项目。 项目信息 提供完整的Git提交历史,和每节视频一一对应,目前有41次提交,355行注释,271行代码(不包含可视化布局文件,纯Swift和Objective-C代码)。

    2848 人正在学习 去看看 任苹蜻

swift调用oc的方法:

1、桥接文件,一般是swift工程,在创建一个oc文件时,系统自动添加(不用改名,直接默认即可)

2、将需要引用的oc文件 .h头文件 添加到桥接类中。
具体方法可以参考我的这篇博客,里面进行了详细讲解

oc调用swift

1、首先设置一下Packing

进入TARGETS ->Build Settings -> Packaging 中

设置Defines Module为YES

设置 Product Module Name (这个也可以不设置,直接使用默认就行)

这里写图片描述

2、设置完之后,在需要引用的oc文件头部 import一下,格式为: #import “工程名-Swift.h”

比如:#import “H56580E2E-Swift.h”

然后就可以使用swift文件了

2016-05-04 20:37:14 taoerit 阅读数 4149
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

    这是一门快速入门iOS开发的课程,目的是让大家快速学会,iOS开发环境搭建,和iOS一些基础知识,最后完成一个小项目。 项目信息 提供完整的Git提交历史,和每节视频一一对应,目前有41次提交,355行注释,271行代码(不包含可视化布局文件,纯Swift和Objective-C代码)。

    2848 人正在学习 去看看 任苹蜻

1  创建swift项目
2 在swift项目中添加oc文件,及.h 和 .m 文件
3 在创建oc文件时,可能提示你是否创建桥接文件,点击是即可,
   如果没有提示需要自己创建
4 手动创建桥接文件,选择项目名称 -> Build Settings -> 搜索框输入swift,
 Objective Bridging Header中的值设置为 SwiftSocket-Brigding-Header.h ,如图


5 创建 SwiftSocket-Brigding-Header.h,在该文件中添加oc头文件

比如:

#import "hello.h"


6 我的oc文件如下

hello.h文件

#import <Foundation/Foundation.h>

@interface hello : NSObject

- (void)sayHello;

@end


hello.m 文件

#import "hello.h"

@implementation hello

- (void)sayHello {

    NSLog(@"hello , i'm oc !");

}

@end

7 swift调用








2015-01-16 11:00:12 u012524022 阅读数 4213
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

    这是一门快速入门iOS开发的课程,目的是让大家快速学会,iOS开发环境搭建,和iOS一些基础知识,最后完成一个小项目。 项目信息 提供完整的Git提交历史,和每节视频一一对应,目前有41次提交,355行注释,271行代码(不包含可视化布局文件,纯Swift和Objective-C代码)。

    2848 人正在学习 去看看 任苹蜻

   对于已经工作的开发者,并不适合也没有条件从一个全新的swift项目开始,进行开发. 虽然网上关于swift和oc混合编程的教程比较多,但是大多是基于 swift项目的,所以对咱们 OCer的参考价值有一定折扣.

   现在swift虽然仍然存在很多缺陷,但是鉴于苹果的强势,是时候在项目中把简单的功能交给swift了,给自己,给项目,给swift一个缓冲区,都是极好的.

   说了这么多,开始上代码.


   现在的背景是: 已经有一个oc项目了,我想要加入 swfit,并且实现 oc调用 swift ,swift调用oc .

   1.新建一个swift文件

    

   2.接下来会询问你是否建立桥接文件,点击是 ,那么我后面的就是多余的了,所以选择取消,我们手动建立桥接文件

   3.手动建立桥接文件:新建头文件 



     关于命名: 有经验的人都知道,这个头文件是项目公用的,同时如果自动创建,文件名也是 :

     项目名-Bridging-Header.h 

     但是因为我现在的项目名是中文,所以我自己命名了一下.

  

   4. 配置头文件 

       在build setting里面搜索 swift ,根据实际情况进行配置:

       注意:是相对于工程文件所在的相对路径.从 Finder里面看,不要让项目中得group扰乱你的判断


   5.在头文件中引入需要的 oc头文件,这里我就用 UIKit了


    

   6.编写代码

  

      可以看到,我们可以使用UIKit的类了


   注意:关于自定义类,希望有个好的命名规范,那么在混合编程中,你将受益无穷


  7.oc调用swift

    现在因为测试我想把窗口的根控制器设置为我的swift的那个.

    因为swift没有头文件,所以不好办了...

    其实,系统默认给我们生成了头文件(需要我们的swift类是NSObject的直接或者间接子类),我们只要引入

    项目名-Swift.h

    没办法了,我的项目名是中文...

     引入:


  8.使用 swift的类

  

  9.运行

   一切正常 (好丑,不要吐槽)


   

       

 


2018-08-01 10:30:45 weixin_34247032 阅读数 14
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

    这是一门快速入门iOS开发的课程,目的是让大家快速学会,iOS开发环境搭建,和iOS一些基础知识,最后完成一个小项目。 项目信息 提供完整的Git提交历史,和每节视频一一对应,目前有41次提交,355行注释,271行代码(不包含可视化布局文件,纯Swift和Objective-C代码)。

    2848 人正在学习 去看看 任苹蜻

前言

因最近准备切换公司Objective-C(下面简称OC)项目为Swift项目,切换过程中不可避免地涉及到混编这一块,特此记录下来, 主要分为在swift项目中调用OC文件 和在OC项目中调用swift文件

在Swift工程或者文件使用Objective - C文件

  • 在OC项目中添加swift文件或者在swift项目中添加OC文件(创建的文件必须是继承与NSobject或者间接继承与NSobject)

  • 这时会提示你是否添加桥接文件,点击创建后体统会自动创建一个桥接文件,但是如果点击取消后,就需要自己建桥接文件;

  • 不过名字必须是“ProjectName-Bridging-Header.h”头文件(名称组成:工程名-Bridging-Header.h),如果名字记不清也可以自己新建Header file后,在Targets→Build Settings→Swift Compiler - General→Objective-C Bridging Header配置文件路径,这个文件主要是Swift使用OC类时使用

  • 在桥接文件即projectName-Bridging-Header.h文件中引入需要的OC头文件,具体使用,按照对应的Swift语法结构来即可

在Objective - C工程或者文件使用Swift的文件

  • 在OC中调用swift需要先import桥接文件(项目名-Swift.h,自动生成)
  • 这个文件是混编时,系统生成的Swift文件对应的Objective-C的头文件,具体可以在Targets→Build Settings→Swift Compiler - General→Objective-C Generated Interface Header Name进行配置,默认文件名是工程名-Swift.h,一般不做改动。
  • 这个文件虽然在工程中看不到,但是她真实存在,编译后,你可以按住Command+单击该文件名,就会看到具体生成的代码
  • 引入后,具体类的使用,直接按照OC的方式使用即可。

注意事项

  • 对于需要混编的Swift类添加@objc声明或继承NSObject或NSObject的子类如果要在Objective-C类中使用TestClass类,应当使用@objc加以声明,或者将TestClass继承自NSObject或NSObject的子类,否则,引入ProductName-Swift.h之后,程序找不到对应类。
class TestClass {

// 属性

// 实现

}
复制代码
  • 在swift类中调用OC文件中的单例时,OC单例方法命名强制为share开头,否则在swift文件中找不到该方法

  • 使用第三方Framework 设置: target-->build setting -->Packaging -->Defines Module为 “Yes”;然后,配置文件Target -> Build Phases -> Link Binary,添加要导入的Framework;最后,还是要配置桥接文件,比如要使用 abc-lib.framework库中的 abc.h 就要这样配置:#import"abc-lib/abc.h";

  • Subclass子类问题:对于自定义的类而言,Objective-C的类,不能继承自Swift的类,即要混编的OC类不能是Swift类的子类。反过来,需要混编的Swift类可以继承自OC的类。 注解

  • OC宏文件: 如Swift文件要使用OC中定义的宏,只能使用常量简单宏文件

  • Swift独有特性: Swift中有许多OC没有的特性,比如,Swift有元组、为一等公民的函数、还有特有的枚举类型。所以,要使用的混编文件要注意Swift独有属性问题。

案例之swift中使用OC的block

Swift中使用Closure不能使用Block作为属性进行传值,必须是初始化方法或函数。 Objective-C文件中:

#import <UIKit/UIKit.h>
typedef void (^Myblock)(NSString *arg); 

@interface FirViewController : UIViewController 
//@property (copy, nonatomic) Myblock myBlock; 
//这种作为公共参数的形式,如果在Swift类中去回调的话,是有问题的。提示没有初始化方法,所以使用下面的以Block为参数的方法 

- (void)transValue:(Myblock) block;

@end
复制代码

下面是.m文件

#import "FirViewController.h" 
@implementation FirViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.view.backgroundColor = [UIColor whiteColor]; 
} 

- (void)transValue:(Myblock)block
{ 
    if (block) 
    { 
        block(@"firBack"); 
    } 
} 
@end
复制代码

在Swift文件回调:

在Swift使用OC的类时,首先在桥接文件中声明oc的头文件 工程名-Bridging-Header.h这是创建Swift工程的情况下

import UIKit 
class ViewController: UIViewController 
{ 
   override func viewDidLoad() 
    { 
        super.viewDidLoad() 
        self.view.backgroundColor = UIColor.whiteColor() 
    } 
    @IBOutlet weak var goFirst: UIButton! 
    @IBAction func goFirstAction(sender: AnyObject) 
    { 
        let firVC:FirViewController = FirViewController() 
        firVC. transValue { ( arg:String !) -> Void in 
            self.aBtn?.setTitle(arg, forState: UIControlState.Normal)
        } 
        self.navigationController?.pushViewController(firVC, animated: true) 
}
复制代码

转载于:https://juejin.im/post/5b615d3ce51d45191e0d221f

iOS OC项目调用Swift类

阅读数 20584

OC项目使用swift

阅读数 879

swift oc 混合编程

阅读数 501

没有更多推荐了,返回首页