2019独角兽企业重金招聘Python工程师标准>>>

收集整理,希望对大家有帮助

1、OC调用Swift实例方法

例如在ViewController.m类里调用Swift的logMe实例方法,就可以这么写:

SwiftDemo* demo = [[SwiftDemo alloc] init]; [demo logMe]; 2、OC调用Swift静态方法

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

public static func swiftStaticFunc(log: NSString) { print(log); } 然后回到ViewController.m类里调用该方法(记得编译一下才可以)同样、调用方式和OC之间的调用类似:

[SwiftDemo swiftStaticFunc:@"oc call swift static func"]; 3、Swift调用OC实例方法

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

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

4、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") 方法从第一个参数开始都要写在括号里。

5、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 fun") 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) } 当然,还有其他方式来实现。可以尝试找一下方法。

转载于:https://my.oschina.net/jack088/blog/1031060

Swift类与OC类方法相互调用的相关推荐

  1. Python 同一个类中不同函数相互调用

    本文采取:Python的类中函数方法相互调用的两种方式_狗哥的博客-CSDN博客 __metaclass__=type class Stu:name=Noneage=Noneschool=" ...

  2. 彻底搞懂Python类属性和方法的调用

    Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的. 一.类.对象概述 在面向对象程序设计中,把数据以及对数据的操作封装在一起,组成一个整体(对象 ...

  3. swift 打包sdk_在封装SDK中Swift和OC混编之相互调用

    oc和swift混编之相互调用.jpg 在非SDK中: 1.swift调用oc 步骤: 创建 工程名-Bridging-Header.h 放入oc的头文件,swift即可调用 在swift项目中或者在 ...

  4. OC与swift相互调用

    一.OC调用swift文件 二.swift调用OC文件 三.注意和总结 添加: 四.自定义桥接文件 一.OC调用swift文件 在OC项目中创建一个swift文件的时候,Xcode 会提示 需要创建一 ...

  5. Objective-C学习笔记(十九)——对象方法和类方法的相互调用

    事实上在OC的对象方法(减号方法)和类方法(加号方法)并非相互独立的,它们也能够发生千丝万缕的关系,今天我们来研究下它们两者相互调用的问题.该样例还是以People类为基础. (一)对象方法调用类方法 ...

  6. Swift学习Day01(Object_c 与Swift的相互调用 )

    为什么80%的码农都做不了架构师?>>>    从今天开始: 学习一门新门的语言Swift,之前常用的语言  java .object-c:相信 学起swift来,也会很快的: 之前 ...

  7. 转载 iOS js oc相互调用(JavaScriptCore) --iOS调用js

    iOS js oc相互调用(JavaScriptCore) 从iOS7开始 苹果公布了JavaScriptCore.framework 它使得JS与OC的交互更加方便了. 下面我们就简单了解一下这个框 ...

  8. 文档类CDocument、子框架类CFrameWnd及视图类CView的关系及如何相互调用

    文档类.子框架类及视图类的关系及如何相互调用 收藏 了解文档和视图的相互作用关系是编写MFC程序的基本功.但是MFC的应用程序框架把文档和视图之间的关系封装了起来,初学的朋友往往不得要领,因此写程序往 ...

  9. python修改类的属性值_python 四种方法修改类变量,实例对象调用类方法改变类属性的值,类对象调用类方法改变类属性的值,调用实例方法改变类属性的值,直接修改类属性的值...

    三种方法修改类变量,实例对象调用类方法改变类属性的值,类对象调用类方法改变类属性的值,调用实例方法改变类属性的值,类名就是类对象,city就是类变量, #coding=utf-8 class empl ...

最新文章

  1. N个免费DevOps开源工具,没用过,至少应该了解!
  2. 无线渗透--wifiphisher之wifi钓鱼获取wifi密码
  3. mysql+怎样查询最后几条_mysql 查询开头或最后几行
  4. java彩色的世界_JAVA真彩色转256色的实现
  5. .Net Core实现区块链初探
  6. .NET实时2D渲染入门·动态时钟
  7. MVC微信浏览器图片上传(img转Base64)
  8. PAT乙级题解目录——更新ing
  9. 用命令提示符使用MySQL
  10. python django企业固定资产管理系统pycharm项目源码lw
  11. 福州太冷?那就快来这些地方!不仅有威廉王子的蜜月圣地,也有贝克汉姆的度假天堂!全部免签or落地签...
  12. 2.4父子进程虚拟地址空间情况
  13. SPL工业智能:发现时序数据的异常
  14. C语言学习笔记-P1 初识C语言(1)
  15. 贝塞尔曲线-曲线拟合
  16. MySql的详细安装与配置步骤
  17. 推动和规范编程教育纳入中小学相关课程加强师资建设(2020)
  18. 运行maven打包的项目jar包
  19. vc项目开发:俄罗斯方块制作日志
  20. 员工转正申请书_员工转正申请书简短的

热门文章

  1. Java中BigDecimal工具类(支持空值运算版)
  2. 你真的会写二分检索吗?
  3. 时间序列基础教程总结!
  4. 14岁清华本科新生免试直博!高校新生大数据陆续曝光,男女比例、年龄差距各异......
  5. 【每日一算法】杨辉三角到底是什么?
  6. 【每日一算法】最常见的单词
  7. 分布式事务篇——第一章:分布式事务前言
  8. Python设计模式-代理模式
  9. python从控制台读取数据
  10. 卷积神经网络(CNN)实现CIFAR100类别分类