oc 属性 调用swift_oc类调用swift类,怎么获取swift类的属性 ios - CSDN
精华内容
参与话题
  • oc调用swift: 需要在暴露出来的方法和属性上加@objc否则不可用。需要在工程配置里面做一些小改动。 具体设置和内容可以参考: https://www.jianshu.com/p/754396e7e1bd https://www.jianshu.com/...

    swift调用oc: 需要在统一的bridge头文件(xxx-Bridging-Header.h)里面import,然后即可使用。

    oc调用swift: 需要在暴露出来的方法和属性上加@objc否则不可用;且文件的类需要继承自NSObject或NSObject的子类。另外需要在工程配置里面做一些小改动。

    具体设置和内容可以参考:
    https://www.jianshu.com/p/754396e7e1bd
    https://www.jianshu.com/p/e781748c9807

    强烈推荐,很详细的一篇:
    https://www.jianshu.com/p/2ed48b954612

    官方文档链接:
    https://developer.apple.com/documentation/swift
    (最下面是混编相关资料,很全,可随时在这里查)

    展开全文
  • swiftOC混编(方法调用

    万次阅读 2016-02-12 10:35:31
    OC调用SwiftOC调用Swift方法比较简单。但是需要注意以下几点: 1.需要在当前OC类里导入xxx-Swift.h头文件,其中xxx为项目名称(与你的项目配置相关,具体配置方式见上一篇文章) 2.OC类里仅可以调用public的Swift...

    原创文章转载请注明出处。

    背景


    在上一篇文章swift与OC混编(创建混编工程)中简单讲述了怎么创建Swift和OC的混编工程。本篇讲一下Swift和OC的混编工程中的方法调用。

    OC调用Swift


    OC调用Swift方法比较简单。但是需要注意以下几点:

    • 1.需要在当前OC类里导入xxx-Swift.h头文件,其中xxx为项目名称(与你的项目配置相关,具体配置方式见上一篇文章)

    • 2.OC类里仅可以调用public的Swift方法和变量

    • 3.Swift类最好用@objc(xxx)进行描述

    暂时想到这几点,如有疏漏请留言指出,不胜感激。

    剩下的调用方式就和普通的OC之间调用方式类似了。

    OC调用Swift实例方法


    继续用上一篇文章的例子进行说明,例如在ViewController.m类里调用Swift的logMe实例方法,就可以这么写:

    SwiftDemo* demo = [[SwiftDemo alloc] init];
    [demo logMe];
    

    OC调用Swift静态方法


    首先先在SwiftDemo.swift文件中声明一个静态方法:

    public static func swiftStaticFunc(log: NSString) {
        print(log);
    }
    

    然后回到ViewController.m类里调用该方法(记得编译一下才可以吆~)

    桐乡的,调用方式和OC之间的调用类似:

    [SwiftDemo swiftStaticFunc:@"oc call swift static func"];
    

    Swift调用OC


    前一篇文中也已经说过需要有一个桥接文件Swift才可以调用OC相关方法以及属性等,这里不再赘述,忘记了的可以再回去看一下。

    Swift调用OC实例方法


    其实前面文中已经举例说明了调用方法。这里再简单重复一下。

    在SwiftDemo.swift类里调用ViewController.m类里的logYou方法,swift调用代码如下:

    let vc = ViewController()
    vc.logYou()
    

    声明一个变量vc,也就是ViewController的实例对象。然后用vc对象调用实例方法logYou。

    Swift调用OC多参方法


    首先先在ViewController.h中声明一个OC的多参方法:

    - (void) logMe:(NSString*)logMe logYou:(NSString*)logYou;
    

    在.m文件中进行一下实现:

    - (void)logMe:(NSString *)logMe logYou:(NSString *)logYou {
        NSLog(@"%@--%@", logMe, logYou);
    }
    

    在SwiftDemo.swift文件中调用方法如下:

    vc.logMe("log me", logYou: "log you")
    

    方法从第一个参数开始都要写在括号里。

    Swift调用OC静态方法


    首先先在ViewController.h中声明一个OC的静态方法:

    + (void) ocStaticFunc:(NSString*)log;
    

    然后在.m文件中简单些一下实现:

    + (void)ocStaticFunc:(NSString *)log {
        NSLog(@"%@", log);
    }
    

    回到SwiftDemo.swift文件中,用swift调用OC的静态方法。

    ViewController.ocStaticFunc("swift call oc static func")
    

    Swift调用OC变参方法


    在某些需求情景下,需要用到变参函数。简单举个例子:

    + (void) stringParams:(NSString*)params,...;
    

    这种例子在系统函数中也可以见到。比如常用的NSString的一个方法:

    - (instancetype)initWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2);
    

    OC的调用方法就不再重复了。这里说一下Swift怎么调用OC的变参方法。

    首先,Swift不能直接调用OC的变参方法

    如果必须要用到,则需要对函数进行简单修改。

    拿上面刚说到的stringParams:方法举例。

    需要把方法的写法改为:

    + (void) stringParams:(NSString*)params args:(va_list)args;
    

    函数的具体实现:

    + (void) stringParams:(NSString *)params args:(va_list)args {
    
        va_list args_copy;
    
        __va_copy(args_copy,args);
        NSMutableString* format = [NSMutableString stringWithString:@""];
        while (va_arg(args, NSString*))
        {
            [format appendString:@"%@,"];
        }
        va_end(args);
    
        if(format.length>0)
            [format deleteCharactersInRange:NSMakeRange(format.length-1,1)];
    
        NSString* newFormat = [NSString stringWithFormat:@"%@",format];
        NSString * result = [[NSString alloc]initWithFormat:newFormat arguments:args_copy];
        va_end(args_copy);
        NSLog(@"%@", result);
    }
    

    在Swift中的调用方式:

    let args: [CVarArgType] = ["i'm", " showhilllee"]
        withVaList(args) {
            (pointer: CVaListPointer) in
            return ViewController.stringParams("%@,%@", args:pointer)
        }
    

    当然,还有其他方式来实现。可以尝试找一下方法。

    结语


    本文Demo可以在【这里】下载到

    —End—

    展开全文
  • 之前在开发是遇到了在OC文件中调用Swift对象的变量调用不到的问题,这里总结一下: 1.首先我们一个Swift项目TestProject。 2.建立一个Swift的文件继承自NSObject名字为SwiftFile.swift,并声明一个字符串变量...

    之前在开发是遇到了在OC文件中调用Swift对象的变量调用不到的问题,这里总结一下:

    1.首先我们一个Swift项目TestProject。

    2.建立一个Swift的文件继承自NSObject名字为SwiftFile.swift,并声明一个字符串变量swiftName。

    import UIKit
    
    class SwiftFile: NSObject {
    
        var swiftName = ""
    }

    3.建立一个OC的文件ObjectFile,并导入“HFSTeacher-Swift.h”(OC想要调用Swift需要导入此文件)如何配置以及导入原因可以自行查询。

    #import "ObjectFile.h"
    #import "HFSTeacher-Swift.h"
    
    @implementation ObjectFile
    
    -(void)oneMethod
    {
        SwiftFile *swiftFile = [[SwiftFile alloc]init];
        NSLog(@"%@",swiftFile.swiftName);
    }
    
    @end

    这个时候会报错,说在SwiftFile中找不到swiftName成员。

    4.这个时候需要在SwiftFile.swift中加入一个声明@objcMembers以表示文件中成员可以被OC调用:

    import UIKit
    
    @objcMembers
    class SwiftFile: NSObject {
    
        var swiftName = ""
    }
    

    5.如此则大功告成!

    展开全文
  • 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方法

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

    千次阅读 2018-09-06 11:47:34
    1.新建Swift文件之前做以下设置 2.创建Swift文件后,会提示创建桥接文件,点击创建 3.Swift 类 import Foundation class RealmManager: NSObject { override init() { super.init() } @objc func ...
  • 1. swiftoc混编译具体怎么实现,这儿我就不重复讲出了,网上有大把的人讲解。 2. 在swiftOC混编的编译环境下, oc类不能访问swift创建类中的代理? 解决方法如下: 在代理的头部加上 @objc(代理...
  • oc调用swift中的struct

    千次阅读 2016-09-05 10:26:53
    oc调用swift中的struct  在oc中是不能调用struct里面的内容的,你想在类似class前面加个@objc的方法加在struct前面,你是发现是不行的,那但是我们又想在oc中调用struct的属性,那怎么办呢?我们只能够再建一...
  • OC调用Swift方法

    千次阅读 2018-05-02 15:36:48
    第一步:创建桥接文件第二步:配置桥接文件第三步:创建pch文件并配置其路径 第四步:在pch文件中导入如下头文件,注意:...,这里的xxx就是第二步中的Module name, 注意不要写错了 第五步:OC中直接调用Swift...
  • Swift调用OC枚举

    千次阅读 2019-09-17 14:35:00
    OC中 typedef NS_ENUM (NSUInteger, EVDeviceType) { EVDeviceAudioCapture = 0, EVDeviceAudioPlayback = 1, EVDeviceVideoCapture = 2 }; Swift EVDeviceType.audioCapture
  • SwiftOC 互相调用

    千次阅读 2018-07-20 16:19:07
    Swift 调用 OC Swift 调用 OC 分为两种常见情况,一种是直接在 Application 的 project 中使用;另一种情况是,在 framework 开发中使用。 对于互相调用的原理,如下图所示,更详细的内容可以参考 《Using Swif ...
  • swift项目中,OCswift文件相互调用

    千次阅读 2017-08-10 13:40:38
    有时候 ,我们会涉及到双向混合编程,特别是OC和swift的互相引用。   swift调用oc的方法: ...1、桥接文件,一般是swift工程,在创建一个oc文件时,系统自动添加(不用改名,直接默认即可) ...oc调用swift
  • Swift调用OC代理

    千次阅读 2019-09-17 14:51:16
    oc @protocol EVCommonDelegate <NSObject> @optional - (void)onLoginSucceed:(EVUserInfo *_Nonnull)user; @end swift class CloudLoginVC: UIViewController, EVEngineDelegate func onLoginSucceed...
  • Swift是否和OC一样有runtime机制

    千次阅读 2016-03-31 12:57:52
    OC语言最大的特性无疑是其的动态性,可以利用OC的动态性能够获得一个类的方法和属性,从而实现灵活的程序,但Swift是否也包含了runtime机制呢? 下面我们将从纯Swift的类和继承OCSwift类来阐述Swift的runtime机制 分析...
  • 在项目里交叉使用SwiftOC

    万次阅读 2014-06-27 16:45:14
    SwiftOC的兼容性使得你可以在项目里使用Swift+OC的方式编写应用程序,称为混合+匹配(mix and match),用这种方式可以一边使用享受新语言的快速特性,一边无缝的接合你已有的OC代码(原文听起来好NB的样子,其实也就...
  • OC代码中使用Swift文件的实践

    千次阅读 2018-05-31 11:32:11
    最近在研究swift,就我看来,swift确实是比OC更优秀的语言,这可以体现在很多方面,网上已经对比的很透彻,就不一一赘述。 今天研究了一下如何在OC项目中使用swift文件,即OCswift的混编问题,发现在OC中要使用...
  • Swift 语言出来后,可能新的项目直接使用swift来开发,但可能在过程中会遇到一些情况,某些已用OC写好的类或封装好...这里主要介绍swift类中调用OC方法和swift类中调用C函数以及OC类中调用swift的函数这三种类型的混编.
  • Swift 中如何调用OC的framework

    千次阅读 2019-09-17 14:17:54
    建立桥接头文件 设置桥接文件位置 引入需要的framework #ifndef bridge_h #define bridge_h #import "AFNetworking.h...直接调用 var dataTask = AFHTTPSessionManager.init().post(<#T##URLString: String#...
  • 关于OCSwift混编的基本使用

    千次阅读 2016-06-15 10:32:23
    概述 Swift的设计的初衷就是摆脱...随着Swift的改进及Swift开源项目剧增,越来越多的Objective-C工程开始使用Swift混编,不管是在基于Swift工程中或者Objective-C工程中,Swift和Objective-C文件都可以无缝结合。本文
  • Swift调用Objective C的FrameWork

    千次阅读 2015-04-08 11:21:06
    原创Blog,转载请注明出处 ...很多Github的库经过很多年的发展,源码都是OC写的,,所以,用Swift调用OC的库就是开发中难免遇到的的一个问题,本文以AFNetworking为例,讲解如何跨语言调用。第一步创
1 2 3 4 5 ... 20
收藏数 9,297
精华内容 3,718
关键字:

oc 属性 调用swift