精华内容
下载资源
问答
  • 问题:新建swift文件时,笔者的Xcode没有提示生成桥接文件,需要自己配置并手动创建桥接文件,最后在OC中成功引用swift写的 项目说明:没有使用framework与pod 重要的配置及文件认识 Target–Building Setting...

    前言

    写项目时发现有的方法OC时没有,需要用swift来实现的,于是就跳进了混编配置的坑,参照了许多博客,爬了一上午才爬出来,在这总结一下我挖坑和填坑的经历,如有错误,欢迎纠正。

    • 需求:OC项目中使用新建swift文件的类
    • 问题:新建swift文件时,笔者的Xcode没有提示生成桥接文件,需要自己配置并手动创建桥接文件,最后在OC中成功引用swift写的类
    • 项目说明:没有使用framework与pod

    重要的配置及文件认识

    1. Target–Building Setting–Packing

      • Defines Module 设置为YES

    在这里插入图片描述

    目测是配置项目是否接收混编的(目测哈~)

    • Product Module nameProduct name设置为项目名

    在这里插入图片描述

     后面配置参数时需要引用
    
    1. Target–Building Setting–Swift Compiler-General

    在这里插入图片描述

    • Objective-C Bridging Header:桥接文件路径配置,桥接文件名必须是“ProjectName-Bridging-Header.h”,这个文件在Swift使用OC类时使用
    • Objective-C Generated Interface Header Name:这个文件路径是混编时,系统自动生成的Swift文件对应的Objective-C的头文件路径,OC中使用Swift时使用。这个文件默认为“工程名-Swift.h”,一般不作改动。

    遇到的问题及解决方案

    1. Xcode不能提示自动生成桥接文件

      OC中用Swift时的桥接文件“工程名-Swift.h”:注意,虽然系统没有提示自动生成了该文件,但是是生成了的(划重点)不需要自己再手动创建!!!!(笔者很傻地手动创建了一个,在路径配置和swift类不能识别中浪费了很多时间)。

      Swift中用OC的文件可以自己创建,详情再看看刚刚说的Objective-C Bridging Header

    2. 混编配置过程中Xcode报错

      • 若错误为“XXX……not find” (文件找不到)或者“error opening ……” 一般是文件路径配置错误,注意使用相对路径(直接为创建的头文件名),不要使用绝对路径(/User/……)!!

      • 若错误为“Failed to emit precompiled header for bridging header ”,在buildsetting中的以下两个路径中添加对应的设置,重现编译即可解决

        1. 添加 $(inherited) non-recursiveSearch Path -> Header Search Paths
        2. 添加 ${PODS_ROOT} recursiveSearch Path -> User Header Search Paths

    配置好之后在文件中的使用

    桥接文件实际上就是转换语言

    • 在OC中使用Swift的类

      1. Swift类最好直接或者间接地继承NSObject,不然很可能不会被OC识别出来

      2. Swift类前使用@objcMembers 表示该类及其定义的成员变量和方法可以被OC识别,如

        @objcMembers public class earthSCNView: NSObject {}
        
      3. 在需要使用swift类的OC文件中导入“工程名-Swift.h”文件就可以了,不需要再import其他的swift文件,如

        #import "物语-Swift.h"
        
    • 在Swift中使用OC

      目前没有使用,大概就是在“ProjectName-Bridging-Header.h”中导入要使用的OC头文件

    其他

    更详细的可以看看这篇博客:Swift和Objective-C混编的注意啦

    展开全文
  • OCSwift中循环引用的问题

    千次阅读 2015-12-20 15:33:22
    一.OC中的循环引用分为中的循环引用和对象之间的循环引用。 1.的循环引用 造成原因: 在两个的.h文件中使用了#import "" 而造成两个之间的循环引用 解决办法:在一个的.h中使用#import "",而在另外一个中...

    总结一下自己对OC中和Swift中循环引用的认识。

    一.OC中的循环引用分为类中的循环引用和对象之间的循环引用。

    1.类的循环引用

    造成原因: 在两个类的.h文件中使用了#import "<#header#>" 而造成两个类之间的循环引用

    解决办法:在一个类的.h中使用#import "<#header#>",而在另外一个类中使用@class <#name#>;

    2.对象之间的循环引用:即两个类的实例进行了相互指向,

    如:

    // 教室
    ClassRoom * room = [[ClassRoom alloc] init];
    // 学生
    Student * stu = [[Student alloc] init];

    // 设置引用关系
    room.student = stu;
    stu.classRoom = room;

    一个教室里面有学生,一个学生存在于一个教室里面。

    解决办法:1.一个类里面的属性使用强引用,另一个类中的属性使用弱引用

    // 学生 若引用
    @property (nonatomic, assign) Student * student;
    // 教室 强引用</span>
    @property (nonatomic, strong) ClassRoom * classRoom;

     如果两个属性都是使用的强引用Strong,则想要释放的时候,直接让某个属性等于nil,强制打破循环引用

    stu.classRoom = nil;或者 room.student = nil;

    3.Block中循环引用问题

    在OC环境下Block引起的循环引用问题Xcode会给出一个警告提示

    解决办法:


    两种方法:建议使用第一种方法,后面一种是比较老得方法了,在使用过程中如果对象为空了,会引发程序崩溃。

    二、Swift中的循环引用其实差不多,只是处理的语法不一样而已,关键是理解什么样的代码会造成循环引用。

    1.对象之间的循环引用,直接上图

        

    解决办法一

    解决办法二

    运行效果:

    2.闭包引起的循环引用

    引起循环引用的代码:

    解决办法:

    展开全文
  • 将需要暴露给swift调用的类导入该header.h,即可在swift类中调用,swift一个项目就是一个命名空间,不需要引入oc头文件 2.oc调用swift,百度很久发现都要修改配置,亲测然并卵。 oc调用swift方式,同上swift有...

     

    1. swift调用oc,在swift项目内新建或者拖入oc文件,Xcode会提示添加header引用,点击允许即可,手动档寻百度

    将需要暴露给swift调用的类导入该header.h中,即可在swift类中调用,swift一个项目就是一个命名空间,不需要引入oc头文件

     

    2.oc调用swift,百度很久发现都要修改配置,亲测然并卵。

    oc调用swift方式,同上swift有命名空间概念,因此在oc需要引用swift的类中,导入“xxx-Swift.h”头文件即可,xxx就是你的项目名称。可能没有编译提示

    到此还不能调用,需要在被调用的swift方法或属性前添加 @objc 关键字,暴露给oc调用,此时该方法在oc才能得到编译器通过

     

    记录一下,swift 小坑整理

    转载于:https://www.cnblogs.com/pruple/p/8652051.html

    展开全文
  • swift项目 OCswift相互调用

    千次阅读 2018-06-29 19:33:51
    2、将需要引用oc文件 .h头文件 添加到桥接类中。 具体方法可以参考我的这篇博客,里面进行了详细讲解 oc调用swift 1、首先设置一下Packing 进入TARGETS -&gt;Build Settings -&gt; Packaging 设....

    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文件了

    展开全文
  • 原项目是OC,后来导入swift的组件,已经成功混编了,使用了swift的类和方法,开始在模拟器上运行没有任何问题,后来运行到真机上的时候,也在真机上成功运行了,但Xcode却在OC代码引用swift类时出现了编译错误,...
  • swift项目OCswift文件相互调用

    千次阅读 2017-08-10 13:40:37
    有时候 ,我们会涉及到双向混合编程,特别是OCswift的互相引用。...2、将需要引用oc文件 .h头文件 添加到桥接类中。   如下: 然后在swift调用处,直接就可以使用了。   oc调用swift
  • Swift项目使用OC

    2019-10-05 19:36:21
    要想Swift项目使用OC的类,首先要将OC的类拖拽到Swift项目,然后在Swift项目中建一个桥文件, 用来将Swift类OC的类进行桥接。 以项目使用微信SDK为例, 来建桥文件,让我们的项目可以使用微信SDK的类。 1、...
  • 2、将需要引用oc文件 .h头文件 添加到桥接类中。 如下: 然后在swift调用处,直接就可以使用了。 oc调用swift的方法: 1、首先设置一下Packing 进入TARGETS ->Build Settings -> Packaging 设置Defines ...
  • 【iOS沉思录】OCSwift语言互调

    千次阅读 2017-04-12 14:35:21
    OC和Swift之间的互调很简单,iOS8以后官方给出了这两种语言之间的桥接方案,简单说就是在Swift工程中,通过提示创建的Bridging头文件可以将OC文件和Swift文件衔接在一起,从而可以在OC文件中引用Swift类,或者在...
  • OCSwift混编

    2016-10-28 15:28:02
    需要 #import “项目名-swift.h” , “项目名-Swift.h” 这个文件命名一般是 项目名 加 -swift ,这个文件包含所有swift类引用 Swift 调用 OC : 在Swift(或OC)项目,创建Swift(或OC)类时,Xcode会弹出...
  • OCSwift中的字符串

    2016-10-30 21:51:07
    一、OC中的字符串 引用类型在Object-C中,使用NSString和NSMutableString这两个对字符串进行操作,一个字符串对象会被指针所引用。一般情况下,使用一个旧的字符串对象对一个新声明的字符串对象进行赋值,其实就是...
  • OCSwift文件的混编

    2017-05-23 10:33:31
    1. OC调用Swift类;a. 在工程的 Build Settings 把 defines module 设为 YES. b.引入swift头文件,格式“projectName-filename.swift”(这个文件是系统创建的);2.Swift调用OC类;Swift代码引用OC,需依靠 ...
  • OCSwift进行互相调用

    2019-05-08 17:45:00
    2、将需要引用oc文件 .h头文件 添加到桥接类中。 如下: 然后在swift调用处,直接就可以使用了。 oc调用swift的方法: 1、首先设置一下Packing 进入TARGETS ->Build Settings -&g...
  • 有时候 ,我们会涉及到双向混合编程,特别是OCswift的...2、将需要引用oc文件 .h头文件 添加到桥接类中。 如下: 然后在swift调用处,直接就可以使用了。 oc调用swift的方法: 1、首先设置一下Packing...
  • 本文转自:https://www.cnblogs.com/yajunLi/p/6862164.html 纠结的哈士奇 一、Swift和Objective-C的联系 Swift和Objective-C共用一套...其次就是,OC之前积累的很多类库,在Swift中大部分依然可以直接使用,当然,...
  • SwiftOC混合使用

    2016-04-08 18:35:45
    今天在用Swift重写自己的项目时由于Swift中不允许重写load函数方法,而重写initialize这个方法又达不到效果,至于这两个函数的区别,请自行百度。于是创建一个OC文件然后Swift引用,但是忘了如何引用,在这里...
  • SwiftOC的混编

    2016-03-21 10:21:00
    自2014年苹果推出了Swift之后,确实很快就受到许多...1.在.h文件中引用Swift和方法,需要在.h文件中进行引用,需要注意引用格式: #import "yourProjectName-swift.h" 2.在Build Settings -> Packaging -&...
  • OC中我们使用代理的时候习惯性的使用weak修饰,在swift中其实也是需要的,不然使用代理的就不能释放,原因大家都知道和OC中一样,代理对这个有着强引用;这时大家想着在定义代理的时候使用weak就可以了,但是往往...
  • swift语言在设计时, 使用LLVM编译器提供了ARC循环计数引用, 减轻了程序员在早期OC时代MRC需要手动控制引用计数的负担.最简单的描述循环引用的模型是创建两个简单的, 其中持有一个指向B对象的成员, 同时B持有一...
  • swift循环引用

    2018-04-04 17:01:00
    ARC仅仅能对的实例做内存管理,也就是只能针对引用类型.结构体和枚举都是值类型,不能通过引用的方式来传递和存储,所以ARC也就不能对它们进行内存管理. ...在OC中,可以很简单的举出一个循环引用的例子。比如...
  • 1、直接在swift项目创建oc,会弹出提示没直接选择创建桥接文件,Xcode会自动帮你创建好并进行配置。 2、自己手动创建并配置,名字自己起, 然后进行配置,Target-&amp;amp;amp;gt;Build ...
  • Swift-和结构体

    2018-09-25 19:32:00
    注意:(1)与 Objective-C 语言不同的是,Swift 允许直接设置结构体属性的子属性,OC中的结构体赋值的时候需要为结构体的所有属性设置一个新值 (2 与结构体不同,实例没有默认的成员逐一构造器,所有结构体都...
  • 一,在swift文件 中引用object c文件。  在swift文件中创建一个object cTestSwift2OC,在弹出对话框(Would you like to configure an Objective an Objective-C bridging header?)  选择Yes 这时会自动生成一个...
  • 近期看到swift里面不仅有循环引用和弱引用(weak),还加入了无主引用(unowned),于是写了一些demo,这里总结一下。...在OC中,能够非常easy的举出一个循环引用的样例。比方有两个A和B,A中有一个属...

空空如也

空空如也

1 2 3 4
收藏数 66
精华内容 26
关键字:

oc中引用swift类