oc中引入swift文件

2016-05-04 13:30:35 CSDN_Technology 阅读数 1305

错误信息:

dyld: Library not loaded: @rpath/libswiftCore.dylib

  Referenced from: /private/var/mobile/Containers/Bundle/Application/1348BA9E-21D9-4A31-A03A-B3C801EF6D98/UcanService.app/UcanService

  Reason: no suitable image found.  Did find:

/private/var/mobile/Containers/Bundle/Application/1348BA9E-21D9-4A31-A03A-B3C801EF6D98/UcanService.app/Frameworks/libswiftCore.dylib: code signature invalid for '/private/var/mobile/Containers/Bundle/Application/1348BA9E-21D9-4A31-A03A-B3C801EF6D98/UcanService.app/Frameworks/libswiftCore.dylib'


解决办法(如图):

添加如下信息:

@executable_path/Frameworks

@loader_path/Frameworks




2016-02-14 14:15:37 iOS_wq 阅读数 6151

OC项目引入Swift方法

在OC项目中,有可能会遇到需要引入Swift写的第三方库,下面整理下OC项目如何使用Swift库

1.在已有的OC工程中新建一个Swift文件,命名为Test.swift,会弹出提示,选择Create Bridging Header建立桥接文件,系统会建立“工程名-Bridging-Header.h”




















2. 配置工程

设置Defines Module 为Yes


设置Product Module Name 为当前工程名 (有时系统会自动为我们设置好)


此时系统会为工程创建一个“工程名-Swift.h”的文件(不会显示出来,可以引用),此文件不可手动创建,必须使用系统创建的

3.测试是否成功

新建一个Swift文件,写一个Swift的函数

import UIKit

class Test1: NSObject {

    func show()
    {
        print("hello baby!")
    }
}

在OC工程里调用该函数


成功!

以后在使用的地方直接引用"工程名-Swift.h",不需要引用Swift文件














2018-05-09 14:00:01 yingBi2014 阅读数 1420

Swift中引用OC看这篇
在OC中需要用到Swift代码的文件中引入#import “XXX-Swift.h”,XXX是你的工程名称。

特别注意
1、被使用的Swift的类必须是至少继承自NSObject的,不然OC识别不了这个类。
2、Swift中的属性和方法,要加上@objc标识,不然识别不了。

代码如下,Swift中定义了一个类,这个类有一个类属性和一个类方法。

class UUUU:NSObject {
    @objc static var yyy:String?
    @objc static func test()->(){
        print("XXXX")
    }
}

在OC需要用到的地方先引入#import “XXX-Swift.h”,然后就能用了

    UUUU *u  =[UUUU new];
    NSLog(@"%@" , UUUU.yyy);
    [UUUU test];

Swift中使用类属性和类方法代替宏定义

另外,在Swift的类中,可以使用只读的类属性和类方法来代替OC中的宏定义,这样定义的宏在OC中直接用,省略了在oc中再定义一次的麻烦。代码如下

class UUUU:NSObject {
    //只读的类属性
    @objc static var name:String{
        return "jim"
    }
    //类方法
    @objc static func RGBColor(r:Float , g:Float , b:Float) -> UIColor {
        return UIColor.init(red: (CGFloat(r/255.0)), green: (CGFloat(r/255.0)), blue: (CGFloat(r/255.0)), alpha: 1.0)
    }
}

另一种Swift代替宏定义的方法是使用全局变量和全局函数来定义,Swift中使用全局变量和函数代替宏

2018-06-14 14:42:33 LIUXIAOXIAOBO 阅读数 1573


1首先需要将 always embed swift standard libraries 设置 为yes,如上图

2然后设置SWIF语言的版本,如下图

3 在packing中将Defines module设置为yes

4 在oc工程中中导入swift文件的头文件这样倒入   #import <LiveChatTest-Swift.h>其中LiveChatTest是工程名,我在工程中没有搜索到LiveChatTest-Swift.h文件,但是工程运行没有错误,估计是文件隐形了,或者xcode 做了处理。

2017-04-12 20:11:58 studying_ios 阅读数 5955

最近在研究swift,就我看来,swift确实是比OC更优秀的语言,这可以体现在很多方面,网上已经对比的很透彻,就不一一赘述。
今天研究了一下如何在OC项目中使用swift文件,即OC和swift的混编问题,发现在OC中要使用swift文件也是蛮简单的,实践过程列如下:
1)首先随便创建了一个OC项目,就叫 DetialViewDemo
这里写图片描述
2)因为Swift的代码默认是使用module管理的,所以两者混编的最重要的一步,就是把我们的Swift代码作为一个module暴露给OC工程,具体步骤如下:
这里写图片描述
3)创建一个swift文件或者将已有的swift文件拖入项目中,我这里是拖入了一个练习swift写的一个类:
这里写图片描述
注意点:swift文件添加的时候会提示是否添加桥接文件,直接点击不创建就OK
4)好了,文件都准备好了,接下来就需要在使用到swift文件的类中引入”Product Module Name-Swift.h”,其中Product Module Name其实就是项目的名称,这个在上面配置Module的图中也能看到,然后我们就可以愉快地和swift进行玩耍了
这里写图片描述
注意:引入Product Module Name-Swift.h的时候不一定自动提示,手写之后编译就可以了

当然,我很好奇这是怎么回事,然后我就command+点击 Person 进入了内部查看,发现原来苹果将所有的swift文件中的代码转成了oc的代码,不管你引入多少个swift文件,都会一股脑在Product Module Name-Swift.h文件中翻译成oc文件以便我们oc程序调用
这里写图片描述

怎么样,很强大吧,朋友们赶紧转过来吧,开始自己的swift开发,这绝对是苹果的未来啊!

OC与swift相互调用

阅读数 2370