python混编 swift_julia python 混编 - CSDN
  • Objective-C 与 Swift 混编 Objective-C 与 Swift 混编在使用上主要依赖两个头文件:ProjectName-Bridging-Header.h 和 ProjectName-Swift.h。 对于 Swift 调用 Objective-C,在 ProjectName-Bridging-Header.h 中 ...

    Objective-C 与 Swift 混编

    Objective-C 与 Swift 混编在使用上主要依赖两个头文件:ProjectName-Bridging-Header.h 和 ProjectName-Swift.h。

    对于 Swift 调用 Objective-C,在 ProjectName-Bridging-Header.h 中 import 要使用的 Objective-C 头文件。

    对于 Objective-C 调用 Swift,需要编译过程中生成的 ProjectName-Swift.h 文件,此文件会将 Objective-C 需要使用的 Swift 类转成 Objective-C 格式的 .h 文件。下面就是一段例子:

    Build Pipeline

    当 Objective-C 与 Swift 进行混编时,编译的过程(Pipeline)是:

    • 首先编译 Swift Module。预编译 Bridging Header 后,再编译 Swift 源文件。
    • Swift 编译完成后,生成 ProjectName-Swift.h 的头文件供 Objective-C 使用。
    • 最后编译 Objective-C 源文件。

    Circle Reference

    在开发过程中,有时候会遇到 ’ProjectName-Swift.h’ file not found 错误,而 ProjectName-Swift.h 又是在编译时动态生成的,当出现这样的错误时就比较迷惑。下面就分析一下出现该错误的原因。

    @objc (TTLesson)
    class lesson: NSObject {
    }
    复制代码

    假设有一个 Swift 类 Lesson,Objective-C 的 TTLessonViewController 中使用了该类,因此需要引入 MixedProj-Swift.h 头文件。

    // TTLessonViewController.h
    #import "MixedProj-Swift.h"
    
    @interface TTLessonViewController: UIViewController
    @property (nonatomic, strong) TTLesson *lesson;
    @end
    复制代码

    如果 TTLessonViewController 又要在 Swift 中使用,需要将 TTLessonViewController.h 加入到 MixedProj-Bridging-Header.h 中

    // MixedProj-Bridging-Header.h
    #import "TTLessonViewController.h"
    复制代码

    此时编译就会出现 MixedProj-Swift.h file not found 的错误。重新回顾一下混编时的 Pipeline:

    • 首先编译 Swift,需要先处理 MixedProj-Bridging-Header.h。
    • 在处理 MixedProj-Bridging-Header.h 时,里面的 TTLessonViewController.h 中引用了 MixedProj-Swift.h 头文件。
    • 此时由于 Swift 还没编译,因此 MixedProj-Swift.h 头文件并没有生成,所以出现 MixedProj-Swift.h 找不到的错误。

    解决办法就是不显式的 import 头文件,而是使用前置声明(Forward Declaration),打破 Circle Reference。

    // TTLessonViewController.h
    @class TTLesson;
    
    @interface TTLessonViewController: UIViewController
    @property (nonatomic, strong) TTLesson *lesson;
    @end
    复制代码

    语言混编的一些思考

    笔者在了解 Objective-C 与 Swift 混编时一直在思考语音为什么能混编,语言到底是如何混编的?笔者了解的也不多,这里只是谈谈自己的一些思考,抛砖引玉。

    对于语言混编,不妨尝试着回归到程序本质的角度进行看待:

    程序 = 数据结构 + 算法 / 数据 + 逻辑

    在机器码层面,所有编程语言都转化成了机器指令:

    • 数据:内存访问,一个基地址 Base + 偏移 Offset,读取 Size 长度的内存。
    • 逻辑:用符号标记的一段机器码,跳转到符号标记的地址。

    那语言想要混编,就需要在数据和逻辑之间建立连接

    • 数据:要么内存布局相同,可以直接用;要么互相了解转换规则能够进行转换;要么使用通用格式进行通信。
    • 逻辑:符号能够匹配上或者互相识别,方法调用的 Call Convenience 是相同的,能够互相跳转。

    最后发散一下,既然是建立连接,那么通过 TCP/HTTP/IPC 等方式建立的通信可以看成更广义上的混编。例如客户端以 REST API 的方式向服务器端请求数据也可以看成客户端语言 Objective-C/Swift/Kotlin/Java 与服务器语言 Java/Go/Python 的混编,只是两端之间使用 URL(逻辑)+ JSON(数据)这种通用格式/协议的方式建立起了连接。

    Clang Module

    Module 是 WWDC 2013 就引进的技术,在 Xcode 的 Build Setting 中能看到 Enable Modules (C and Objective-C) 的设置项,在 OTHER_CFLAGS 中也看到了 -fmodule-map-file=“xxx.modulemap”,但是一直对其不太了解,一项技术的出现总是为了解决某些痛点,那 Module 是为了处理哪些问题呢?

    Module 解决什么问题?

    以前在 C/C++/Objective-C 中,源文件中引入的头文件在编译时需要进行展开,预处理宏等相关操作。这样的方式存在以下几种问题:

    Header Fragile

    由于头文件是一起展开后再统一处理宏,当宏重名时,头文件引入的顺序就会导致不一样的结果,并且宏只是简单粗暴的文本替换,也存在宏污染的可能。例如,AppDelegate.m 中定义了一个 readonly 的宏,与 Objective-C 中属性的关键字冲突了。

    // iAd/ADBannerView.h
    @interface ADBannerView : UIView
    @property (nonatomic, readonly) ADAdtype type;
    @end
    
    // AppDelegate.m
    #define readonly 0x01
    #import <iAd/iAd.h>
    
    @implementation AppDelegate
    // ....
    @end
    复制代码

    由于是文本替换,预处理完之后,ADBannerView 的 type 属性中,readonly 被替换成了 0x01,导致编译错误,并且很难定位到问题根源。

    // AppDelegate.m
    #define readonly 0x01
    @interface ADBannerView : UIView
    @property (nonatomic, 0x01) ADAdtype type;
    @end
    
    @implementation AppDelegate
    // ....
    @end
    复制代码

    Compile Time

    由于每个源文件中的头文件都需要展开、预处理,假设有 M 个源文件,N 个头文件,需要 M * N 的编译时间。

    为了优化这个问题,Objective-C 引入了预编译头文件(Pre-Compiled Header),将公用的头文件放入预编译头文件中预先进行编译,然后在真正编译工程时再将预先编译好的产物加入到所有待编译的 Source 中去,来加快编译速度。

    但是 PCH 文件会导致里面的头文件是全局可见的,相当于变成了全局依赖,可能会导致 Namespace Pollution。并且当 PCH 文件变成庞大时,还是会导致预编译头文件的时间变长。

    Link & Use

    在使用框架时,需要 import 正确的头文件,不然可能导致编译问题。另外,仅仅 import 头文件是不够的,需要在设置中链接对应的库,不是很方便。

    Module 是什么?

    framework module UIKit {
    	umbrella header "UIKit.h"
    	module * {export *}
    	link framework "UIKit"
    }
    复制代码

    Modules 相当于将框架进行了封装,看一下上面 UIKit 的 modulemap 文件,Module 在 modulemap 中定义了框架的三大核心要素:

    • umbrella header 描述主要头文件:UIKit.h
    • module 描述需要导出的子 Module:全部导出
    • link 描述需要链接的 Framework:UIKit

    在实际编译时,加入到一个用来存放已编译添加过的 Modules 列表中。如果在编译的文件引用到某个 Modules 的话,将首先在这个列表内查找,找到的话说明已经被加载过则直接使用已有的,如果没有找到,则把引用的头文件编译后加入到这个表中。

    所谓 umbrella header,就是 includes all of the headers in its directory,一个包含框架内所有需要开放头文件的 Wrapper 头文件。为什么叫”雨伞“呢?笔者猜测是“雨伞”能比较形象的描述这种头文件的作用。可以想象一下雨伞☂️的形状和作用,最顶部的那个尖就像把所有东西集中起来,雨伞也将伞下的细节给遮盖起来了。

    @import ModuleName;
    @import ModuleName.SubmoduleName;
    复制代码

    通过 @import 使用 Module,并且 Module 支持 Submodule。如果在 Build Settings 中将 Enable Modules (C and Objective-C) 打开,不需要改变代码,即使使用的是旧的 #import 方式,编译器也会在编译的时候自动地把可能的地方换成 Modules 的写法去编译的。

    总之,Module 有如下特点:

    • 单独编译处理,宏不会互相影响
    • 编译时间从 M * N 变成了 M + N
    • 自动链接相关库

    下一篇,将讲一下如何将一个 Objective-C 与 Swift 混编的代码,从依赖混乱不完备的 Git Submodule,一步步的抽成 Development Pod,最后变成二进制的过程与遇到的坑。

    Article by Joe Shang

    参考:

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

    展开全文
  • OC和Swift混编经验

    2019-06-11 19:22:41
    Swift简介 Swift,苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C*共同运行于Mac OS和iOS平台,用于搭建基于苹果平台的应用程序。 2015年12月4日,苹果公司宣布其Swift编程语言现在开放源...

    github地址

    Swift简介

    Swift,苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C*共同运行于Mac OS和iOS平台,用于搭建基于苹果平台的应用程序。 2015年12月4日,苹果公司宣布其Swift编程语言现在开放源代码

    Swift 优势

    简洁代码

    1. Swift所有的变量定义使用var ,常量定义使用let。
    2. 数组或字符串可以使用"+"符号直接相加。
    3. 可以使用高阶函数map,flatMap,reduce,filter简化代码量。

    易维护

    1. Swift抛弃了OC头文件(.h)和实现文件(.m)组合成一个代码文件(.swift)。
    2. 因为Swift不是基于C构建的,而OC是在C和Smalltalk下构建。所以在设计上比较新颖,同时我们能看到现代语言(JavaScript,Java,Python,C#,以及 C++ )的身影特性:泛型,可选类型,类型推断,高阶函数。基于泛型和高阶函数的使用导致更清晰,更可重用的代码,更易于维护。

    安全

    1. 在OC中不同类型可以直接相加,默认会隐式转换。但是swift不同类型的是不能直接相加,必须先进行类型转换。
    2. 在其他的编程语言当中,你并不能知道哪个变量可以为空(null)哪个不能,这就强制开发者去考虑可能为空的情况。
    3. 在OC中if判断存在非0即是true的方式,但是在swift中if判断必须为true或者false。

    1. OC是一门动态的语言,很多实际执行需要在运行时才可以确定,Swift不一样,Swift将很多在运行时才可以确定的信息,在编译期就决定了。这就让Swift更加快速。Swift性能探索和优化分析-王巍
    2. 在纯Swift中的函数调用就不是OC的那套runtime了,而是类似C++的vtable,在编译期就决定调用哪个函数。那如果想使用OC的特性需要继承自NSObject。

    Swift 与 OC 的混编

    1. 当我们在OC项目中添加Swift文件的时候系统会默认帮我创建一个桥接文件。 “项目名称-Bridging-Header.h”的文件。
    2. 在Swift中调用OC的类时,只需要在上面桥接头文件import即可
    3. 在OC中调用Swift类,则需在OC文件中import "项目名称-Swift.h" 头文件即可

    混合开发的问题

    最近有个新闻列表改版需求,那在此下使用Swift去重做这块需求,需求中遇到一些坑和大家分享下。

    • 数模转换的坑

    在OC项目中常用的MJExtension第三方库。那在swift中我们怎么做呢? 当然可以使用目前第三方库SwiftJson或者HandyJSON或者实现Codable协议。不过这里我使用的是系统KVC方式,遇到问题如下

    1. 因为swift的构造函数与OC不一样,当子类中有自己的构造函数时,那么将不继承父类自定义的构造函数。所以子类需重写父类init(dict : [String : Any])这个构造函数否则将无法使用。
    2. 因为使用的是NSObject的KVC特性所以需加@objc定义子类属性。注意在swift4.0之前默认只要继承NSObject就会系统默认添加,但这之后需要手动添加了。
    class BaseModel: NSObject {
        override init() {
        }
        
        init(dict : [String : Any]) {
            super.init()
            setValuesForKeys(dict)
        }
        //记得重写该方法避免崩溃
        override func setValue(_ value: Any?, forUndefinedKey key: String) {}
    }
    
    class NewsNavModel: BaseModel {
        //type = 998 最新,999 收藏
        @objc var type:Int = 0
        @objc var type_name:String = ""
        
        init(_ type : Int , type_name : String) {
            super.init()
            self.type = type
            self.type_name = type_name
        }
        //需重写父类方法
        override init!(dic: [String : Any]!) {
            super.init(dic: dic)
        }
    }
    
    复制代码
    • 关于@objc坑
    1. 在swift3使用#selector指定的方法,只有当方法权限为private时需要加@objc修饰符,现在Swift4.0全都要加@objc修饰符
    2. 定义的方法,枚举,协议或者是属性如果需要被OC调用则需添加@objc
    3. 自定义的protocol协议中,有optional修饰的非必须实现的方法,需要用@objc修饰
    • 被废弃的方法:

    initialize/dispatch_once方法已经被Swift4.0废弃所以后续不能再使用

    • NSClassFromString方法的坑

    在OC的时候直接使用类名即可转换为对于Class,但是Swift中有命名空间存在所以使用这个方法需要添加项目的名称

    //OC 中
    Class ocClass = NSClassFromString(@"MyFavModel");
    
    //Swift中
    let swiftClass = NSClassFromString("项目名称.MyFavModel") 
    复制代码
    • fatalError

    在Swift 中继承了遵守NSCoding protocol的类时,并自定义构造函数时候则需加入required init(coder aDecoder: NSCoder)。这个是在OC中则不存在的。 其作用是表明子类不能通过被fatalError定义的函数做初始化

    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
        self.hidesBottomBarWhenPushed = true
    }
    
    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    复制代码
    • OC的类不能继承至Swift的类,但是Swift类可以继承至OC的类。

    补充:即使Swift的父类是OC也不能让OC类继承该Swift类

    • Swift中没有宏,只能使用全局常量或者全局函数替代。
    /// 当前app信息
    let AppInfo = Bundle.main.infoDictionary
    
    /// 当前app版本号
    let AppCurrentVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
    
    /// 日志打印
    func DLog(str: String) {
        #if DEBUG
        print("file: \(#file), line:\(#line),\(str)")
        #endif
    }
    复制代码
    • Swift不像OC那样能直接调用C++,需通过OC或者C去调用C++。

    其他

    Swift版本升级

    例如:Swift3.0 -> Swift4.0

    1. 选中要转换的 target
    2. Edit -> Convert -> To Current Swift Syntax
    3. 勾选需要转换的 target (pod 引用不用勾选),Next
    4. 选择转换选项,Next

    快速的将OC语言转换成Swift语言

    这里推荐一款swiftify插件。支持在线转换,或者添加插件到Xcode中。

    1. 插件安装AppStore下载地址
    2. 在线转换地址

    快速将json转化为Swift的模型对象

    基于Codable协议快速的数模序列化

    1. 它不仅支持Swift,还支持其他语言比如Kotlin,Java,C#,Ruby,Object-c,Python
    2. 在线链接

    通过R.swift快速生成资源代码

    根据项目内容来自动化生 ImageName 和 SegueName代码 可以使用Switf的自动化工具了,R.swiftSwiftGen

    let image = UIImage(imageName: .imgIcon)
    复制代码

    推荐

    Swift学习文档:

    1. The Swift Programming Language (Swift 4)
    2. Swift的180个介绍

    Swift 书籍

    1. Swifter - Swift 必备 tips
    2. Swift 进阶

    参考地址

    1. Swift4.0新特性

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

    展开全文
  • 2019独角兽企业重金招聘Python工程师标准>>> ...

    最近用Swift对以前写的一个应用进行重写,使用了Swift和Objective-C的混编,提交审核后发现比以前大了很多,采用纯Objective-C的包是5.5MB,而采用Swift和Objective-C混编的包是15.1MB,足足大了9.6MB。 对比后发现混编的包里多了一个Framewords的文件夹,如下图所示,2个包大小的差距应该就是这个文件夹引起的。 输入图片说明

    不过也许这不是一个大问题,因为绝大多数用户都是通过Wi-Fi来下载更新的,当然,在某些网络不发达的地区,这个额外增加的下载成本还是非常高的。

    但我觉得苹果不至于会没发现这个问题吧,于是我做了个实现,用iTunes把ipa包下载到电脑上,结果发现下载下来的包和iTunes上展示的大小完全不一样,下载下来的ipa包才6MB,也只比采用纯Objective-C的包大了0.5MB,而iTunes页面上展示的大小却是是15.1MB,这说明了下载的ipa包是经过压缩的,我们不用担心采用Swift和Objective-C混编的包会导致用户下载的成本增大。

    下载下来的包:

    输入图片说明

    iTunes页面上的展示:

    输入图片说明

    转载于:https://my.oschina.net/ilrrong/blog/800923

    展开全文
  • OC与Swift混编

    2020-08-08 11:43:29
    swift强势来袭,想要紧跟脚步,但之前OC的工程推倒重来在时间和实践上都有点伤神,混编就是这个过渡的桥梁,使用混编,快速完成在OC工程中首次创建swift文件或者swift中首次创建OC文件,都会给出提示是否自动生成一个桥接...

        swift强势来袭,想要紧跟脚步,但之前OC的工程推倒重来在时间和实践上都有点伤神,混编就是这个过渡的桥梁,使用混编,快速完成

    在OC工程中首次创建swift文件或者swift中首次创建OC文件,都会给出提示是否自动生成一个桥接文件,其实自动生成是两个文件,一个可见一个不可见,但是这两个文件的名称都能在配置文件中找到,在使用之前先看个小实验......

    1.使用前需要了解的配置

    做个小实验(只用静静看着就好了):

    1).target-->buildSetting--(输入packaging)

    a.前提条件:工程名字是TimingUsingPickerView

    b.Product Module Name 设置成 "imooc"

    c.Product Name设置成"imooc1"

    d.Defines Module 系统默认是No,此处还是用系统默认的    (这个是经过尝试,设置成Yes 或者No在我目前使用的范围内并没有什么影响,当然个人涉及范围有限,可能有什么未知的影响还没触及,感兴趣可以尝试,欢迎补充~_~)

    配置如下:

    实验配置如图

    2)在OC中创建swift文件 生成桥接文件和隐藏文件:

        target-->buildSetting--(输入swift)

    查看文件名

    如图,可以看到生成的文件名:

    a.桥接文件" TimingUsingPickerView-Bridging-Header.h" 可见的,在工程中可查找到该文件(在swift调用OC文件)

    b.imooc-Swift.h不可见,但调用时可像查看系统类的方法查看(在OC中调用swift文件)


    经实验发现:

    a.无论怎么改变,桥接文件的名字都是跟工程名保持一致.但是该文件是可以单独创建,进行配置的.具体操作步骤:创建一个头文件,然后模仿"工程名-Bridging-Header.h"的形式命名,再查找target-->buildSetting--(输入swift),在Bridging Header中进行设置(一般还是建议使用系统自己创建)

    b.生成的不可见文件imooc-Swift.h名字是受Product Module Name影响的.该文件不建议自己创建,所以需要自定义的一定在使用之前先设置好Product Module Name.


    2.OC与swift文件的真正混用

    实验条件可以忽略,但是为了避免不必要的麻烦,建议看了实验结果再往下走:

    1)target-->buildSetting--(输入packaging)-->设置Product Module Name (也可不设置,默认是系统的)


    moduleName


    2)在OC中首次创建swift或者在swift中首次创建OC,弹出提示,是否创建桥接文件

    提示是否创建桥接文件

    点击确定,则会生成两个文件:

    TimingUsingPickerView-Bridging-Header.h 以工程名命名的桥接文件,可见

    imooc-Swift.h 不可见,在target-->buildSetting--(输入swift)进行查看


    3)swift与OC的混用

      a.在swift中使用OC的文件

    在自动创建的桥接文件TimingUsingPickerView-Bridging-Header.h中,依次导入swift文件中需要使用的类,然后就可以使用了,不过在swift文件中得按swift的规则写了

    导入需要的OC文件


     b.在OC中使用swift的文件

    在OC中导入系统自动生成的imooc-swift.h文件(不能直接查找到该文件,但是可以像查看系统类的方法点击进入查看) ,就可以使用创建的swift文件,"...-swift.h"/"...-Swift.h"都可以

    导入系统创建的文件


    3.swift调用OC中的一些坑

    OC 中宏定义 如果只是值类型等简单的宏定义,swift也可直接调用,但是如果是比较复杂的方法,swift就只能呵呵了,这个时间建议创建方法可以使用swift中的延展extension

    1)swift中简单宏使用如:

    OC中简单宏定义
    swift中调用简单宏


    2)swift中不能使用OC中复杂的宏如:

    OC中复杂的宏

    当不能使用的时候,就需要写成方法供swift使用,可以创建一个swift文件,然后添加需要的延展,如下图:

    UIColor的延展
    swift方法中方法的调用


    3)创建的swift类,必须继承自NSObject或者NSObject的派生类,否则编译后不会生成对应的转换类,接下来验证一下(此处感谢  @小杰杰杰提示😊)

    a.首先创建一个Person类,不继承NSObject

    未继承NSObject的Person类


    在OC中TestViewController.m中使用,记得引入"工程名-swift.h",出现如下图的提示,此处按住"command"键,点击Person,进入到刚刚创建的Person类(见上图)

    OC中使用未继承NSObject的Person类(swift编写)


    b.现在修改原来的Person类,继承NSObject,如下图,修改后要"command+B"编译一下才能看到变化

    继承NSObject的Person类


    同样在OC中TestViewController.m中使用,记得引入"工程名-swift.h",未报错,如下图:

    OC中使用继承NSObject的Person类(swift编写)


    此时,按住"command",点击Person进入,此处有惊喜,如下图:

    swift编写的Person类对应的转换类.可以互相调用,玄机就在这里❗️

    4)创建的swift类中,写了一个枚举,不继承NSObject,此时定义一个该枚举类型的变量,发现桥接文件中没有生成相应的属性,解决办法:定义枚举时需要手动添加添加@objc,如下:

    swift中定义枚举类型的变量


    看来使用OC与swift混编还是有点限制的,使用时需谨慎,不过,这些也已经够平时使用了


    小结:swift和OC混用,坑还是很多的,埋坑是个体力活,常运动是个好习惯...

    以上仅是个人使用总结,欢迎批评指正补充~~~~~~~

    展开全文
  • 最近项目中使用到了一个图表插件,由于这个图表插件使用swift写的,所以需要在项目中使用到swift语言。 苹果推出swift语言也有一段时间,由于swift1.0中bug太多,一直没在项目中使用。写这篇文章的时间swift已经更新...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • opencv的swift实现

    2017-12-21 16:10:35
    实现ios上使用opencv的实现
  • swift和oc混编

    2019-06-15 03:28:46
    2019独角兽企业重金招聘Python工程师标准>>> ...
  • Swift 和 OC 混编

    2019-06-17 22:01:26
    2019独角兽企业重金招聘Python工程师标准>>> ...
  • Swift与OC混编

    2019-06-17 18:13:22
    2019独角兽企业重金招聘Python工程师标准>>> ...
  • 混编Objective-C 和 Swift

    2019-06-16 23:53:36
    2019独角兽企业重金招聘Python工程师标准>>> ...
  • OpenCV初体验,给图片打码 ...本文主要记录我第一次使用OpenCV,在iOS开发平台上面搭建开发环境,并且实现一个简单的马赛克功能开发环境:Swift4、XCode 9.0 1、什么是OpenCV?* 由英特尔公司于1999年发起并...
  • 为什么要写这样一篇文章,因为昨天和一个朋友讨论到Swift和Objective C如何混合开发Framework,中途发现了很多有意思的坑。
  • 最近,除了N多的基于Swift的服务端开发框架,笔者不由深思,到底该这么评价Swift呢?不可否认,在iOS的开发领域,Swift是比OJC拥有着优势,那么在通用语言这个层次上比较时,它又如何呢?Apple 在推出 Swift 时就将...
  • Objective-C与swift混编

    2019-06-14 10:24:27
    2019独角兽企业重金招聘Python工程师标准>>> ...
  • Objective-C和swift混编

    2019-06-16 09:57:59
    2019独角兽企业重金招聘Python工程师标准>>> ...
  • 因为来饿厂以后做的项目是全公司唯一一个 Swift/OC 混编的 iOS 项目,所以一路上踩坑无数,现在把一些踩坑的过程和经验总结起来,供大家参考。相信在浏览本文后,一定会有所收获。我来的时候项目已经开始 Swift 改造...
  • “有时我们的祷告词得到了回应,但不是以我们希望的...好吧,想要充分利用Iphone机芯的机魂来进行运算祈祷,Swift版的TF相信会比Python般的TF更加适合吧(特别针对那些不想像前几篇文章说的一样进行大量OC与C++或PY.
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
1 2 3 4 5 ... 20
收藏数 772
精华内容 308
关键字:

python混编 swift