前言
持续学习
1. 图片管理
单模块管理图片时,podspec
文件,xcassets
和png/jpg
类型的文件不要重复写,这样会造成图片文件的重复加载
错误示范:
1
s.resource = 'XXX/Resource/**/*.{png,jpg}', 'XXX/Resource/**/*.{xcassets}`
因为这时xcassets
里的图片会被前面会被'XXX/Resource/**/*.{png,jpg}'
再次加载,造成图片重复
2. 远程仓库安装后,如果想展示文件夹,podspec
使用subspec
形式,具体可参考AFNetworking
3. 单模块 pod 内,既有 OC 又有 Swift 代码,如何相互调用?
因为模块单工程后,没有我们熟知的bridge-header.h
文件和target-Swift.h
,所以要有以下操作,才能相互调用
3.1 OC 使用 Swift:
3.1.1 OC 使用 Swift:
swift 定义的内容如果需要被 OC 引用,必须声明为public
如果需要整个类(方法和属性)提供给OC,可以在类定义前添加@objcMembers
,或者部分提供给OC的属性或方法前添加@objc
eg.
- 全部内容提供给OC
1 2 3 4 5
@objcMembers public class ClassAAA : NSObject { var a1: String! func funcAAA() { } }
- 只提供方法funcAAA
1 2 3 4 5
@objc public class ClassAAA : NSObject { var a1: String! @objc public func funcAAA() { } }
3.1.2 swift 定义的协议如果要给OC引用,还需要将协议继承class
eg.
1
2
3
4
protocol ABCDelegate: class {
func funcAAA() {
}
}
3.1.3 在podspec
文件内加入以下代码
s.prefix_header_contents = <<-EOS
#ifdef __OBJC__
#import <XXXModule-Swift.h> (module名-Swift.h)
#endif
EOS
3.2 Swift使用OC
在模块内任意OC 头文件中 import
需要使用OC代码即可
4、模块间既有OC又有Swift代码,如何相互调用?
4.1 OC 使用 Swift
在 OC 模块的.podspec
中depency Swift模块名
在 OC 文件中 @import swift 模块
被引用的 swift 文件需要添加@objc public
关键字
4.2 Swift 使用 OC
在模块的.podspec
中depency OC模块名
s.dependency 'Module'
在 swift 文件中import Module
5 总结:
- 不同模块 OC 使用 Swift 模块
- 需要先在模块的 .podSpec 文件中添加
s.dependency 'Swift 模块名'
- 在 OC 文件中
@import Swift 模块名
- Swift 文件需要添加
@objc public
关键字 - 如果在 OC 的 .h 文件使用,需要添加 @class Swift 文件名;
(e.g.
@class VideoCell;
)
- 需要先在模块的 .podSpec 文件中添加
- 同一模块 OC 使用 Swift
- 在 OC 文件中
#import "模块名-Swift.h"
(e.g.#import "ZPMPosition-Swift.h"
) - Swift 文件需要添加
@objc public
- 如果在 OC 的 .h 文件使用,需要添加 @class Swift 文件名;
(e.g.
@class VideoCell;
)
- 在 OC 文件中
- 不同模块 Swift 调用 OC
- 需要先在模块的 .podSpec 文件中添加
s.dependency 'Swift 模块名'
(e.g.s.dependency 'SDWebImage'
) - import 模块名
(e.g.
import SDWebImage
)
- 需要先在模块的 .podSpec 文件中添加
- 同一模块 Swift 调用 OC
- 需要先在模块的 .podSpec 文件中添加
s.dependency 'Swift 模块名'
(e.g.s.dependency 'SDWebImage'
) - import 模块名
(e.g.
import SDWebImage
)
- 需要先在模块的 .podSpec 文件中添加