2018-09-10 09:16:43 weixin_33854644 阅读数 16
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

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

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

swift文件访问oc文件

#oc文件访问swift文件 法一:

法二:

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

2016-06-03 18:38:48 zhonggaorong 阅读数 7071
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

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

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


1. swift与oc混编译具体怎么实现,这儿我就不重复讲出了,网上有大把的人讲解。

2. 在swift与OC混编的编译环境下, oc类不能访问swift创建类中的代理?

解决方法如下:



在代理的头部加上 @objc(代理名字),这样就在外部就可以访问了,如下图。 然后就和oc中的代理一样,写上协议方法,就可以进行你想要的操作了。



3. swift中的回调方法介绍:

   1. 通过代理 ,写法大家可以看上面的两张图片,和oc代理差不多。

   2. 通过闭包来实现oc中代码块(Block)的方法,来进行代码回调

       2.1 定义  (swift类)

      

      2.2 调用   (swift类)

    

     2.3 具体回调处:(OC - 类)

     


本文持续更新, 看oc与swift 混编有哪些雷,需要我们踩

2019-05-05 11:06:37 u014599371 阅读数 28
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

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

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

总体思路:

  1. 建一个pch文件用于引入 工程名-swift.h,实现OC访问swift
  2. 建一个桥接文件用于引入 OC头文件,实现swift访问OC

1. 创建一个Swift或者是OC的工程

(这里以OC工程为例,操作其实都一样)

创建工程

2. 创建一个Swift类(只会在第一次创建的时候提示你)

当你点击 NEXT 时就会出现下图,会提示你是否创建一个桥接头文件,点击 Create Bridging Header

 

创建一个Swift类

 

然后会生成这样的一个桥接文件

 

Bridging Header


作用:

3. 配置Bridging Header路径

Bridging Header路径配置

4. 创建pch文件

pch文件的作用:在这里引入OC的头文件和宏定义可以全局调用,在这里建pch文件的作用是为了让OC类/对象可以访问swift类/对象

 

创建pch文件

 

pch文件

 

注:TestMix-Swift.h 不是自己创建的,是当你配置好 Bridging Header 路径的时候,cmd+B 编译后自动生成

 

TestMix-Swift.h

5. 配置pch文件路径

pch文件路径配置

到此,基本环境搭建完毕,可以cmd+R 试一下,如果工程报错,肯定是哪一个路径报错,或者是引入头文件的时候打错了字母


6. 测试混编

6.1建一个Person类

Person类

6.1 在ViewController.m文件里面写一个按钮

注:你会发现现在可以访问swift的类文件了

 

ViewController.m

6.2 在Bridging Header文件里面引入swift需要访问OC类/对象的头文件

引入OC头文件

6.3 配置NextViewController.swift

注:viewDidLoad方法里面可以看到,现在swift类可以访问OC类了,并可以创建person对象,并赋值

 

NextViewController.swift

6.4 到此混编已经完成,看一下结果吧

结果

补充:swift-OC之间方法调用

http://blog.csdn.net/showhilllee/article/details/50606284

 

2019-06-12 15:29:58 zkdemon 阅读数 336
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

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

    2904 人正在学习 去看看 任苹蜻
  • 环境介绍:

    mac OS sierra 10.12.6
    Xcode9(Version 9.0 (9A235))
    OC的项目,项目中包含多个Target,用于实现环境分离。

    目标:用Swift4.0版本版本进行普通混编开发(此外还有开发Framework混编、引用外部Framework和宿主App混编)。

    普通混编说明

    Swift访问OC OC访问Swift
    不需要在Swift中import OC的类,统一在桥接文件(ProductName-Bridging-Header.h)中导入需要暴露给Swift的OC类即可在Swift中访问。 在OC类中导入ProductName-Swift.h文件(根据不同Target的名称,对应文件名称不同),即可访问Swift中暴露给OC的属性和方法。

    项目大体结构如如下图:

    项目概览.png

    一、Swift中如何访问OC的类

    当我们第一次在工程中创建一个.Swift文件,Xcode会提示你是否创建桥接文件,点击‘是’,Xcode会帮我们给每一个Target建立对应的桥接文件(用于在Swift中访问OC的类)。如果点击了‘否’,可以自己创建桥接文件,然后在下图位置指定桥接文件路径(注意每个Target都对应配置好)

    设置桥接路径.png

    由于不同Target下的桥接文件名称不一样,如果你觉得Swift需要访问OC下的类每个环境不需区分(我们工程中不需要),那么把各个Target下的桥接路径改成同一个即可,删除其他的桥接文件(以后若需区分可以再添加)省得需要同时往多个环境下导入OC的类

    设置桥接路径.png

     

    Xcode9默认混编下的Swift版本不是4.0,各个Target都配置一下

    设置Swift版本号.png

    在桥接文件中导入Swift需要访问的OC类,.Swift文件中即访问OC的类了

    暴露给Swift的文件列表.png

    p7.png

    二、OC中如何访问Swift的类(Swift4.0中想要暴露给OC的方法和属性前面都需添加@objc)

    首先,给每个Target下的build Settings的Defines Module设置为YES

    设置Defines Module.png

    由于Xcode会根据不同的Target的创建不同的‘Swift转换OC下生的成接口头文件’,英文:Objective-C Generated interface Header Name,如下图

    Swift转OC接口文件.png

    Swift转OC接口文件.png

    OC想要访问Swift的文件,需要根据不同Target下导入不同的接口文件,因此我们定义一个Swift.h文件,根据不同的Target导入不同的转接口文件即可。如下图:

    Swift转OC接口文件统一管理.png

    如果你没有在某个OC类中引入当前Target下的接口文件和编译,貌似是没有办法通过command+点击跳入进去。所以我们只需要在某个OC文件中导入该接口文件然后编译,就可以跳入进去了,这里为了方便,建立一个Swift.h文件,根据环境import不同的接口文件。

    上面的预编译宏在下图配置(不同Target配置不同的预编译宏,实现环境分离)

    OC预编译宏.png

    Swift下因为没有预编译宏,但是可以通过Swift Flags配置实现条件编译达到同样的效果(每添加一个标识前,都需要添加一个 -D ,Debug和Release模式下都需要添加-D ,不然编译器无法识别) :

    Swift编译变量.png

     

    至此,配置完成。

    Tip:

    1、Swift 3.2暴露给OC的属性和方法不需要添加@objc,但是4.0需要。
    2、如果你使用的Xcode9.0以下的版本,那么到你导入ProductName-Swift.h文件的时候可能报错,告诉你对应的接口文件(ProductName-Swift.h not found)找不到,但是你的各项配置都正确,应该是Xcode的编译器问题(Clean、重启都没用),直接run就好了,应该能run起来,虽然编译器一直提示报错,建议升级Xcode。
    3、直接拖动对应的Swift文件到工程的话,好像直接拖动添加.swift文件到工程Xcode不会添加到编译列表中,因此要注意检查拖动的文件是否添加到了build phase的编译列表中。
    4、OC项目混编Swift的时候,如果项目没有自动生成桥接文件(ProductName-Bridging-Header.h),那么你一定要自己创建并配置好路径。
    因为:没有桥接文件会影响到你的Swift转OC接口文件(ProductName-Swift.h)中Swift要暴露给OC生成的接口。具体影响有:假设你拖动了N个Swift类,虽然要暴露给OC的Swift基本类和方法都添加了@objc,但只有extention类会自动生成对应的转接口,其他类不会。

     



    作者:002and001
    链接:https://www.jianshu.com/p/754396e7e1bd
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

2017-12-09 18:44:49 u013094208 阅读数 952
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

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

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

欢迎访问我的个人博客

首先在需要引入Swift的文件中导入头文件#import "工程名-Swift.h"

  • OC跳转Swift页面:
#import "ViewController.h"
#import "OCAndSwift-Swift.h"        // 引入头文件

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (IBAction)btnClicked:(id)sender {

    // Swift文件
    ChildViewController *vc = [[ChildViewController alloc] initWithNibName:@"ChildViewController" bundle:nil];

    [self.navigationController pushViewController:vc animated:YES];

}
  • Swift跳转OC页面:

首先创建Swift文件的时候回创建一个工程名-Bridging-Header.h文件,在这个文件中将需要用到的OC文件导入到这里!!!

import UIKit

class ChildViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    @IBAction func btnClicked(_ sender: Any) {
        let twoVC = ChildTwoViewController(nibName:"ChildTwoViewController", bundle: nil)

        self.navigationController?.pushViewController(twoVC, animated: true)


    }

哈哈,大功告成!!!

OC&swift中的宏定义

阅读数 334

OC与Swift混编

阅读数 228

OC与Swift的区别

阅读数 264

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