• iOS OC项目调用Swift

    2017-03-17 13:51:27
    网上有很多关于OC项目中使用Swift类的方法,但是亲自试了之后,发现不够详细,多次尝试后,终于找出详细的方法。 现把方法和遇到的问题,记录下来,方便其他同仁借鉴.

    网上有很多关于OC项目中使用Swift类的方法,但是亲自试了之后,发现不够详细,多次尝试后,终于找出详细的方法。
    现把方法和遇到的问题,记录下来,方便其他同仁借鉴:

    一、新建一个OC工程,工程名称自定,在这里我定义为OCAndSwiftDemo,如图:

    新建项目架构图

    二、在新建Swift类之前,进行相关设置,如图:

    相关设置

    三、在项目中,新建一个TestDemo的swift类,点击Create后,提示如图:

    创建OC调用Swift类的桥接文件

    选择Create Bridging Header,一定要选择这个,如果不选择,就引入不了Swift类,然后生成”项目名称-Bridging-Header.h”桥接文件

    然后编辑Swift类,如果Swift类想要被OC发现,必须继承自NSObject,如图:

    TestDemo类

    四、调用Swift类,我们想要调用Swift类的方法里面引入头文件:”项目名称-Swift.h”,如图:

    调用Swift类

    注释:如果调用不了Swift类,可以先Shift+Command+R一下。

    展开全文
  • OC项目中使用Swift

    2016-02-27 09:23:30
    OC项目中使用Swift 本文版权归作者所有,如需转载请联系孟祥月 CSDN博客:http://blog.csdn.net/mengxiangyue 独立博客:http://mengxiangyue.com 最近公司的项目开始计划使用Swift,由于原先的工程都是使用...

    OC项目中使用Swift

    本文版权归作者所有,如需转载请联系孟祥月
    CSDN博客:http://blog.csdn.net/mengxiangyue
    独立博客:http://mengxiangyue.com

    最近公司的项目开始计划使用Swift,由于原先的工程都是使用OC编写的,不可能一下全部转换成Swift,所以采用OC与Swift混编的方式是最好的选择。这篇文章只是一个简单的介绍,并没有太高深的知识。

    我新建了一个演示的OC工程,当然你可以使用你已经存在的OC的工程。如果我们想要在OC工程中使用Swift的代码,Swift的代码默认是使用module管理的,同样这里我们也需要把我们的Swift代码作为一个module暴露给我们的OC工程,修改下面的配置:

    上面的修改了一个配置项,有一个Product Module Name在后面会使用。

    在工程里面点击File/New/File…,选择iOS/Source/Cocoa Touch Class,按照如下填写创建一个新的文件:

    上图中的Subclass of一定要设置为NSObject或其子类,否则OC工程将不会找到该类。

    点击确认后会选择保存路径,点击Create,出现如下界面:

    这个界面是询问是否创建桥接的头文件,这个文件在Swift调用OC代码的时候比较管用,但是在OC中调用Swift的时候我发现没有什么卵用。

    选择Don’t Create按钮。

    在Test.swift中添加如下的代码(解释都在注释里面了):

    import UIKit
    
    /*
        如果Swift类想要被OC发现,必须继承自NSObject并且使用public标记,并且该类中想要被OC访问的方法也必须使用public标记,具体知识可以去看Swift的访问控制
        原因:Swift的代码对于OC来说是作为一个module存在的
    
        当然全局的Swift函数,我还没发现怎么在OC中访问,如果哪位清楚还请告诉一下,谢谢!
    */
    
    
    public class Test: NSObject {
        public func log() {
            print("这是Swift的方法")
        }
    }
    
    public func globalLog() {
        print("这是Swift全局的log方法")
    }

    我们在我们想要调用Swift类的方法里面引入头文件:”Product Module Name-Swift.h”,其中Product Module Name替换成在上面配置项中显示的内容,例如:

    #import "ViewController.h"
    // 引入Swift头文件
    #import "OCAndSwift-Swift.h"
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        // 使用Swift的类
        Test *test = [[Test alloc] init];
        [test log];
    }
    
    @end

    这样我们就能够在OC中使用Swift的代码了,最后还要说明一点:”Product Module Name-Swift.h”(例子中的是OCAndSwift-Swift.h),是由编译器自动生成的,如果import后没有提示,编译一下。并且只有在工程中包含至少一个Swift文件的时候,才会自动生成这个文件,所以如果工程中如果没有Swift文件的时候,就算在配置中设置对了,import该文件也会报错。

    展开全文
  • SwiftOC进行混编,首先要有一个.h文件,这里使用Bridging-Header.h然后设置项目的Build Settings--Swift Compiler--Objective-C Bridging Header内容为DemoApp/Bridging-Header.h,这个与Bridging-Header.h...

    第一步:创建和配置Bridging-Header.h

    Swift与OC进行混编,首先要有一个.h文件,这里使用Bridging-Header.h然后设置项目的Build Settings--Swift Compiler--Objective-C Bridging Header内容为DemoApp/Bridging-Header.h,这个与Bridging-Header.h位置有关,从项目的根目录开始在Objective-C Bridging Header选项里面写入Bridging-Header.h相对路径。


    第二步:第三方项目依赖

    对于第三方项目的依赖,一开始我打算用CocoaPods,但是过程曲折,最后一直报

    ld: 218 duplicate symbols for architecture i386
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    我也没有办法了就把第三方项目源码拷贝到自己的项目里面,上图也可以看到我拷贝的事AFNetworking项目,然后在把源码加入到Build Phases--Compile Sources里面

    第三步:修改Bridging-Header.h

    在Bridging-Header.h中写入#import "AFNetworking.h"

    第四步:调用OC

    前面的工作做完后我们就可以调用第三方项目的功能了

    //
    //  ViewController.swift
    //  DemoApp
    //
    //  Created by jiezhang on 14/10/24.
    //  Copyright (c) 2014年 jiezhang. All rights reserved.
    //
    
    import UIKit
    
    class ViewController: UIViewController {
    
        @IBOutlet weak var weatherInfo: UITextView!
        override func viewDidLoad() {
            super.viewDidLoad()
            updateWeatherInfo()
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
        
        func updateWeatherInfo() {
            let manager = AFHTTPRequestOperationManager()
            let url = "http://api.openweathermap.org/data/2.5/weather"
            println(url)
            let params:NSDictionary = ["lat":"37.785834", "lon":"-122.406417", "cnt":0]
            println(params)
            manager.GET(url,
                parameters: params,
                success: { (operation: AFHTTPRequestOperation!,
                    responseObject: AnyObject!) in
                    self.weatherInfo.text = "JSON: " + responseObject.description!
                },
                failure: { (operation: AFHTTPRequestOperation!,
                    error: NSError!) in
                    self.weatherInfo.text = "Error: " + error.localizedDescription
                   
            })
        }
    
    

    }

    第五步:运行界面


    下载地址:http://pan.baidu.com/s/1c0myIbA


    展开全文
  • OC工程调用Swift方法

    2017-01-11 11:45:08
    1.建一个OC工程命名为SwiftOC 2.新建一个swfit文件命名为Test.swift,会弹出提示,选择Create Bridging Header建立桥接文件,系统会建立“工程名-Bridging-Header.h” 3.配置工程 设置Defines Module 为Yes ...

    为防止出问题,建议以这样的方法做:
    1.建一个OC工程命名为SwiftOC
    这里写图片描述
    2.新建一个swfit文件命名为Test.swift,会弹出提示,选择Create Bridging Header建立桥接文件,系统会建立“工程名-Bridging-Header.h”
    这里写图片描述

    这里写图片描述
    3.配置工程
    设置Defines Module 为Yes
    这里写图片描述
    设置Product Module Name 为当前工程名
    这里写图片描述

    此时系统会为工程创建一个“上面所填Product Module Name-Swift.h”的文件,此文件不可手动创建,必须使用系统创建的

    4.创建一个Test2.swift
    这里写图片描述

    import Foundation
    public class HH:NSObject
    {
    
        public func show()
        {
         print("hello")
        }
    }

    5.在OC文件中引用swift

    
    #import "ViewController.h"
    //导入时需要手动打上,系统没有提示
    #import "SwiftOC-Swift.h"
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        HH *VC=[[HH alloc]init];
        [VC show];
    }
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    @end
    展开全文
  • OCSwift混合使用

    2017-07-11 09:13:02
    随着swift趋向于稳定,越来越多的公司启动的新项目也想使用swift过把瘾,使用swift的好处与弊端不再赘述。目前版本是swift3.0,而且Xcode9beta版中已经更新到swift4.0。使用swift开发是大趋势,...OC引用Swift第三方

    随着swift趋向于稳定,越来越多的公司启动的新项目也想使用swift过把瘾,使用swift的好处与弊端不再赘述。目前版本是swift3.0,而且Xcode9beta版中已经更新到swift4.0。使用swift开发是大趋势,这里从以下几个方面看一下如何进行简单的配置。

    • OC中引用Swift文件
    • Swift中引用OC文件,以及第三方库
    • Xcode8以后编译swift2.x
    • OC引用Swift第三方库

    一、OC中如何引用Swift文件:
    首先先来创建一个object-c语言的项目,然后直接一个swift类,这时会弹出如下提示:
    配置桥接头文件
    先选择Do not Create,稍后会提到,系统会自动创建一个格式:xxx项目名-Swift.h的头文件,不显示但是可以直接引用,直接引用,这时发现报错了。
    报错了
    这是为什么呢?虽然一般情况下是直接引用xxx项目名-Swift.h,真正需要引用的是Product Moudle Name对应的文件名:
    模块名配置
    也可在此基础上搜索swift,对应的文件名正是想要的文件名,为什么上面还要提搜索pack找Product Moudle Name直接搜swift不就好了吗?因为这个名字是拼出来的:Product Moudle Name-Swift.h,可以去pack里面删除Product Moudle Name对应的内容,再回来搜swift看一下就明白了。
    搜索swift
    项目在创建的时候名称有的时候可能有歧义系统自动帮我们修改。swift在OC项目中是作为Moudle来使用的,名称继承自PROJECT下的Product Moudle Name,导入时报错请自行检查是否匹配。
    目前为止导入头文件成功了,调用一下SwiftTest类中的log方法。
    方法配置
    却发现一直报未定义该类的错误:
    未定义报错
    点击生成的项目名-Swift.h的头文件里面却发现没有关于Swift声明:
    未声明该类
    后来经过查找发现是因为没有创建桥接文件导致的,手动来创建一下桥接文件,命名规则:项目名-Bridging-Header。
    创建桥接文件
    到项目里手动配置文件路径:
    配置方法
    配置完成后clean然后build点击项目名-Swift.h进入就可以发现定义swift类的声明,Command + R 运行成功。
    二、Swift中引用OC文件,以及第三方库
    swift引用OC文件比较简单:
    1)创建桥接文件(参考上面步骤)
    2)把需要用到类或者第三方SD、framework头文件引入
    3)直接在swift文件中使用
    由于比较简单不在赘述,稍后会提到注意事项。
    三、Xcode8以后编译swift2.x以及pod引用的swift框架
    Xcode8以后swift的currentVersion改为3.0,如果是swift2.x项目打开往往会有这样的提示:
    转换提示
    如果你想转换的直接点击convert,但是要注意备份小心一万点爆红,如果点击了later之后又想转换了可以进行如下操作:
    手动转换
    如果想要继续编译swift2.x需要设置版本:
    设置版本
    如果没有使用第三方框架那么现在就可以build了,而且是成功的,但是如果使用了第三方的framework,那么每个framework都需要设置一次,如下:
    设置pod的版本
    这里几点需要注意的:
    1)pod里面的framework的版本必须与taget里面的一致否则编译失败。
    2)必须与最低版本一致有一个framework使用了swift2.x其他都必须设置为YES
    3)任何时候点击convertToCurrentVersion都是转换到最新版本也就是当前的swift3.0,即使你设置了使用以前版本再次进行转换也是转换到swift3.0不会转换到以前版本。
    4)每次pod以后之前的配置都会重置,需要从新设置版本。但是可以在Podfile里面加入如下代码,将会对所有提交的framework进行设置:

    post_install do |installer|
      installer.pods_project.targets.each do |target|
      target.build_configurations.each do |config|
      config.build_settings['SWIFT_VERSION'] = '3.0'
      end
     end
    end

    如下图:
    pod设置
    四、OC引用Swift的framework:
    配置方法跟pod配置版本号方法相同,设置完版本号后在需要的文件中引用:#import <framework/framework-Swift.h>】也可以通过引入模块的方式:@import framework;这两种方式效果相同。
    注意:很多swift三方库,并不支持OC使用,而绝大部分OC库支持swift,是向下兼容的,OC与Swift混编的注意事项,稍后补充。
    ps:文章有点啰嗦,本人系新手,主要是记录给自己看。

    展开全文
  • swift导入oc第三方

    2019-05-05 15:31:39
    swift导入oc第三方库 前言 对于ios开发而言,目前很多第三方库或者demo还是以oc为主,swift相关的资料很少,这篇文章就结合博主的开发实例对在swift工程中导入并使用oc版本的第三方库进行阐述。 正文 1.编写oc桥接头...
  • 这就涉及到OCswift的混编了,正好本人最近也在模仿斗鱼直播的项目,自己也使用了OC第三方库,今天就给大家介绍一下自己的使用过程。 一、导入第三方库 这里需要注意点,我使用pod导入OC第三方库...
  • OCSwift混编Pod引入第三方库的问题 问题描述:Swift应用OC 的开源框架,需要创建一个桥接头文件,问题就出在这个看似简单,却隐藏着一个巨大的问题:一切都按部就班的在桥接头文件中引入了OC 头文件,但是...
  • 作为ios开发的新语言,相对比较oc 资源还是比较欠缺,有时候开发中,我们需要引入第三方库就不得不引入oc版的第三方库,然后苹果公司也给集成了这样的快捷方式。导入第三方的方法有:1、CocoaPods 2、手动将第三方的...
  • 在进行swift编程的时候,有时候难免要进行与Objective-c的混编(如引入OC语言的第三方库),本文主要讲述swiftOC混编的两种方法。 一.比较方便直接的方法 1.直接在创建好的swift工程中任意新建一个OC的类,我们会...
  • 情景我在桥接文件中直接写入#import 然后在swift文件中得重新导入才可以使用,即import SVProgressHUD项目中很多地方都需要SVProgressHUD,在每一个需要SVProgressHUD的swift文件中再导入一遍那可不是明智的选择解决...
  • 废话不多说,下面开始介绍如何以正确的姿势导入第三方库文件。 学习过Objective-C的同学肯定会知道,一般会有三种方式导入第三方库,分别是:cocoasPod管理工具,打包成framwork导入,直接导入原文件。然而,swift...
  • OC中调用Swift代码方法

    2018-06-03 09:27:48
    最近在项目中使用到了Swift语言写的第三方的框架,所以在这里将OC中使用Swift的方法说明一下。1.首先要在Build Setting中进行相关配置2.在Podfile文件中要加上use_frameworks!为什么要加use_frameworks!呢?首先需要...
  • 再导入一个Swift第三方框架,运行项目发现AFN找不到了:把Swift的第三方和use_frameworks!去掉项目又可以运行了,首先思考:只添加两样东西 use_frameworks! 和 Swift 三方库。从以下几点考虑:1,AFN框架是否出了...
  • OC项目使用swift

    2018-02-02 16:54:34
    1.新建Swift File命名为Common,创建完成会提示是否创建桥接文件,选择Create Bridging Header, 在BeiSu-Bridging-Header文件添加你想引用OC的文件或者第三方 2.TARGETS - Build Settings 搜索Defines Module, ...
  • 随着 swift 的不断完善 项目中或多或少 有可能会用到 swift第三方库 而有时候你又需要把你的项目打包给别的公司去用,就需要OCswift 混合打包  现在提供一种分开打包的方法: 在自己的项目中你可以直接用桥...
  • 1、Charts的下载地址 2、解压后将文件夹全部复制到项目中去 3、在项目中添加Charts.xcodeproj ...6、在oc中使用swift,需要桥接文件,若是之前没有添加过swift文件,那么只要新建一个swift文件,
  • OC 项目中使用基于 Swift 的 CocoaPods 库 随着 Swift 的流行,各种神奇的库也开始有对应的 Swift 版本了,而其中一些更神奇的库却只有 Swift 版本… 正巧接手了一个前人用 Swift 写的项目,里面有一个...
  • 但是由于swift才出来不久,目前很多cocoapods管理的第三方库依然是由Objective-C编写的。 为了能够在swift中使用这些类库,需要在Xcode中进行一些配置。 假设你的项目是基于cocoapods的,并且
  • Swift 第三方库整理

    2018-01-23 09:08:21
    Reachability.swift:用来检查应用当前的网络连接状况。 2、综合 Perfect:swift的服务器端开发框架(针对于移动后端开发、网站和web应用程序开发)。RxSwift:函数响应式编程框架,是ReactiveX的swift版本,可
1 2 3 4 5 ... 20
收藏数 1,315
精华内容 526