2019-02-26 14:16:29 wei78008023 阅读数 1525
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

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

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

之前在开发是遇到了在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.如此则大功告成!

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代码)。

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


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 混编有哪些雷,需要我们踩

2016-10-15 21:35:15 wang631106979 阅读数 3081
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

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

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

在OC和Swift混编的过程中发现在OC中通过NSClassFromString获取不到Swift中的类,调研了一下发现问题所在,下面是我的解决方案:

问题的发现过程

UIViewController *destinationVC = [[NSClassFromString(demoInfoModel.demoVCName) alloc] init];
        [self.navigationController pushViewController:destinationVC animated:YES];

在使用以上代码时发现,Swift的通过类名在OC中通过NSClassFromString获取不到这个类
,返回值为nil

问题的原因和解决方法

经过一番查找后发现是因为在OC中Swift类中的所有类的接口都转到了一个叫YourProduct_Example-swift.h的头文件中,YourProduct是你的工程名,其中的类名和方法都已经改变了,我们需要做的就行进入到这个头文件中,去找到对应的类名就行了,如下图所示:

这里写图片描述

红框里面的字符串就是你Swift里面转成OC后的类名,将之前的类名替换就行了,比如:

// 我之前的类名是WCLLoadingViewViewDemoVC
NSClassFromString(@"WCLLoadingViewViewDemoVC")
// 替换到OC中就是_TtC19CRAnimation_Example20WCLLoadingViewDemoVC
NSClassFromString(@"_TtC19CRAnimation_Example20WCLLoadingViewDemoVC")

通过以上步骤就能转换成功了

2018-05-03 10:42:49 ModalYin 阅读数 1922
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

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

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

1 swift项目,找不到第三方文件,exp:AFN.h找不到,要修改build settings 里的User header custome search paths ,改成${SRCROOT},选择recursive.

2 oc项目找不到swift文件,要引入工程名-swift.h文件。

A.设置Product Module Name 为当前工程名。注意:工程名字不要含有特殊字符(例如 +)

**Target-> Bulid Settings ->输入packa 设置Defines ModuleYes**

B. 如果未设置,或者更改了工程名字了,报错 找不到文件。尝试用以下命令找到”工程名-Swift.h” 文件,进行比对。

cd ~/Library/Developer/Xcode/DerivedData find * -iname '*Swift.h'


3

2016-01-12 20:13:49 zww1984774346 阅读数 9103
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

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

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

为防止出问题,建议以这样的方法做:
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
没有更多推荐了,返回首页