2016-06-03 18:38:48 zhonggaorong 阅读数 7072
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

    这是一门快速入门iOS开发的课程,目的是让大家快速学会,iOS开发环境搭建,和iOS一些基础知识,最后完成一个小项目。 项目信息 提供完整的Git提交历史,和每节视频一一对应,目前有41次提交,355行注释,271行代码(不包含可视化布局文件,纯Swift和Objective-C代码)。

    2968 人正在学习 去看看 任苹蜻


1. swift与oc混编译具体怎么实现,这儿我就不重复讲出了,网上有大把的人讲解。

2. 在swift与OC混编的编译环境下, oc类不能访问swift创建类中的代理?

解决方法如下:



在代理的头部加上 @objc(代理名字),这样就在外部就可以访问了,如下图。 然后就和oc中的代理一样,写上协议方法,就可以进行你想要的操作了。



3. swift中的回调方法介绍:

   1. 通过代理 ,写法大家可以看上面的两张图片,和oc代理差不多。

   2. 通过闭包来实现oc中代码块(Block)的方法,来进行代码回调

       2.1 定义  (swift类)

      

      2.2 调用   (swift类)

    

     2.3 具体回调处:(OC - 类)

     


本文持续更新, 看oc与swift 混编有哪些雷,需要我们踩

2019-05-07 11:35:12 Bolted_snail 阅读数 277
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

    这是一门快速入门iOS开发的课程,目的是让大家快速学会,iOS开发环境搭建,和iOS一些基础知识,最后完成一个小项目。 项目信息 提供完整的Git提交历史,和每节视频一一对应,目前有41次提交,355行注释,271行代码(不包含可视化布局文件,纯Swift和Objective-C代码)。

    2968 人正在学习 去看看 任苹蜻
  • 最近在一个混编项目中,一个OC类需要去访问一个Swift类,访问其他Swift类都可以,但就没法访问报以下错误:
    报错
  • 点进去看发现该类型是个结构体,如下所示:
    在这里插入图片描述在这里插入图片描述
  • 解决方案:因为Swift的结构体除了不能继承外可以有自己的成员变量和方法,就是一个不能继承的类.所以我将struct改成了class,结果还是不行.后来就像因为Swift中的类可以没有父类,而OC的中有基类的,所有类都最终继承至NSObject,所以就将该CTPCarVideoUploadInfoModel也继承NSObject,果然改完后再OC中就可以访问该类型了.改完后如下:
     class CTPCarVideoUploadInfoModel:NSObject{
     }
    
2018-03-29 15:55:35 Ziank 阅读数 334
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

    这是一门快速入门iOS开发的课程,目的是让大家快速学会,iOS开发环境搭建,和iOS一些基础知识,最后完成一个小项目。 项目信息 提供完整的Git提交历史,和每节视频一一对应,目前有41次提交,355行注释,271行代码(不包含可视化布局文件,纯Swift和Objective-C代码)。

    2968 人正在学习 去看看 任苹蜻

在使用OC和swift进行混编时,我们经常会需要在swift中使用OC中的宏定义,但是这些宏定义经常会提示无法找到或者类型错误,那么我们到底应该怎么做才正确呢?

OC中的宏定义和C一样,主要有以下几种情况:


OC宏定义
  1. 定义一个常量值,后面可以方便使用;如 #define TOOLBAR_HEIGHT 44
  2. 定义一个不会变化的常用变量值,或者一个较长的对象属性;如#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
  3. 定义一个会变化的常用变量值,或者一个较长的对象属性;如:#define STATUS_BAR_HEIGHT ([UIApplication sharedApplication].statusBarFrame.size.height)
  4. 定义一个带参数的宏,类似于一个函数;如#define RGB_COLOR(r,g,b) [UIColor colorWithRed:r/255.f green:g/255.f blue:b/255.f alpha:1.0]

对于这四种情况,在swift中只能处理第一种情况,而且是直接转换为了let TOOLBAR_HEIGHT = 44;那么由于使用TOOLBAR_HEIGTH的地方基本上都是使用CGFloat,而TOOLBAR_HEIGTH的类型却是Int,就会导致类型不匹配。

所以我们在混编时对于这些宏定义都需要单独处理:

swift宏定义处理
  • 第一种的话就比较简单,可以直接使用let TOOLBAR_HEIGTH:CGFloat = 44来替换就可以了;
  • 第二种因为后面的值永远不会改变,也可以使用let来替换;可以用let SCREEN_WIDTH = UIScreen.mainScreen().bounds.size.width
  • 第三种情况,也就是后面的值会发生改变,如状态栏高度,就不能够使用let来替换了,因为let是定义的常量,如果使用let,如果将会导致不能够获取正确的值;这里可以使用函数来获取:func STATUSBAR_HEIGHT() -> CGFloat { return UIApplication.sharedApplication().statusBarFrame.size.height };使用时通过函数STATUSBAR_HEIGTH()获取状态栏高度;
  • 第四种,因为有输入参数,所以也只能使用函数来替换;如:func RGB_COLOR(r:CGFloat, g:CGFloat, b:CGFloat) -> UIColor {return UIColor(red: r, green: g, blue: b, alpha: 1.0)};
2018-09-10 09:16:43 weixin_33854644 阅读数 16
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

    这是一门快速入门iOS开发的课程,目的是让大家快速学会,iOS开发环境搭建,和iOS一些基础知识,最后完成一个小项目。 项目信息 提供完整的Git提交历史,和每节视频一一对应,目前有41次提交,355行注释,271行代码(不包含可视化布局文件,纯Swift和Objective-C代码)。

    2968 人正在学习 去看看 任苹蜻

swift文件访问oc文件

#oc文件访问swift文件 法一:

法二:

转载于:https://juejin.im/post/5b96366df265da0ac849186e

2017-12-09 18:44:49 u013094208 阅读数 954
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

    这是一门快速入门iOS开发的课程,目的是让大家快速学会,iOS开发环境搭建,和iOS一些基础知识,最后完成一个小项目。 项目信息 提供完整的Git提交历史,和每节视频一一对应,目前有41次提交,355行注释,271行代码(不包含可视化布局文件,纯Swift和Objective-C代码)。

    2968 人正在学习 去看看 任苹蜻

欢迎访问我的个人博客

首先在需要引入Swift的文件中导入头文件#import "工程名-Swift.h"

  • OC跳转Swift页面:
#import "ViewController.h"
#import "OCAndSwift-Swift.h"        // 引入头文件

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (IBAction)btnClicked:(id)sender {

    // Swift文件
    ChildViewController *vc = [[ChildViewController alloc] initWithNibName:@"ChildViewController" bundle:nil];

    [self.navigationController pushViewController:vc animated:YES];

}
  • Swift跳转OC页面:

首先创建Swift文件的时候回创建一个工程名-Bridging-Header.h文件,在这个文件中将需要用到的OC文件导入到这里!!!

import UIKit

class ChildViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    @IBAction func btnClicked(_ sender: Any) {
        let twoVC = ChildTwoViewController(nibName:"ChildTwoViewController", bundle: nil)

        self.navigationController?.pushViewController(twoVC, animated: true)


    }

哈哈,大功告成!!!

OC与Swift混编

阅读数 228

没有更多推荐了,返回首页