一个元组小技巧
![Uploading Honzon_045208.jpg . . .]#元组小拓展用法
Swift 元组高级用法和最佳实践提到了元组做为匿名结构体以及对于 Swift 的编译器而言,方法/函数的参数头无非就是一个元组
之后的示例,联想到的元组用法
struct User {
let name: String
let age: Int
}
//vs.
let user = (name: "Carl", age: 40)
let newUser = User(user)
print("new User name:", newUser.name, "age:", newUser.age)
class Person {
let name: String
let age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
let person = Person(user)
print("person name:", person.name, "age:", person.age)
打印结果
new User name: Carl age: 40
person name: Carl age: 40
Swift 元组高级用法和最佳实践同样也列举了一些相似的示例,我就不引用了,但是结论这种方式包含了很多有趣的含义和可能性。如果对类型进行很好的规划,你甚至可以不需要对数据进行解构,然后直接把它们当作参数在函数间传递。更妙的是,对于函数式编程,你可以直接返回一个含多个参数的元组到一个函数中,而不需要对它进行解构。
参考地址:
Swift与OC混编
Swift中使用OC
首先Swift中不再使用头文件和.m文件的方式了。所以也不需要使用import "***.h"
的方式来导入头文件。但是,swift是需要使用头文件进行访问的,只是不需要使用显式的方式使用import进行导入。有两种方式来实现这个头文件的生成。
创建一个名为Honzon
的工程
然后添加一个名为
HonzonOCClass
的文件,并加上如下代码
@interface HonzonOCClass : NSObject
+ (void)logHonzonOCClass;
@end
@implementation HonzonOCClass
+ (void)logHonzonOCClass {
NSLog(@"HonzonOCClass");
}
@end
方式一:利用第一次新建提示的方式自动添加桥接头文件
Create_Bridging_Header.jpg![](/Users/liuqiangdouble/Desktop/Swift 觅仙之路/Swift开光/Images/Create_Bridging_Header.jpg)
然后在桥接文件中导入文件
#import"HonzonOCClass.h"
那么在main.swift
文件中就可以调用OC中的类方法了
HonzonOCClass.logHonzonOCClass()
打印结果
2016-03-10 15:45:07.131 Honzon[1728:171772] HonzonOCClass
方式二:自定义桥接头文件
我们在targets->build settings -> Swift Complier - Code Genneration ->Object-C Bridging Header
可以看到
在这里可以设置为自定义桥接的头文件
那么,创建一个名为HonzonHeader.h
的文件并且导入头文件
#import"HonzonOCClass.h"
然后修改targets->build settings -> Swift Complier - Code Genneration ->Object-C Bridging Header
的桥接头文件为HonzonHeader.h
打印结果:
2016-03-10 16:18:36.962 Honzon[1845:189561] HonzonOCClass
OC中使用Swift
选中targets->build settings ->packing->Product Module Name
中设置模块名,这个名称很重要 swift 的头文件就是根据这个来命名的。
把targets->build settings ->packing->Product Module Name
修改为HonzonModule
,然后在 添加一个名为HonzonSwiftClass
的swift
文件,该代码如下:
class HonzonSwiftClass: NSObject {
class func logHonzonSwiftClassMessage() {
print("logHonzonSwiftClassMessage")
}
}
然后在HonzonOCClass.m
导入HonzonModule-swift.h
文件
点击进入HonzonModule-swift.h
是这个样子的
SWIFT_CLASS("_TtC12HonzonModule16HonzonSwiftClass")
@interface HonzonSwiftClass : NSObject
+ (void)logHonzonSwiftClassMessage;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end
HonzonOCClass.m
具体代码如下
#import "HonzonOCClass.h"
#import "HonzonModule-swift.h"
@implementation HonzonOCClass
+ (void)logHonzonOCClass {
[HonzonSwiftClass logHonzonSwiftClassMessage];
NSLog(@"HonzonOCClass");
}
@end
打印结果如下:
logHonzonSwiftClassMessage
2016-03-10 16:41:41.088 Honzon[1914:199668] HonzonOCClass
总结:
工程中如果Swift需要OC中的类,只需要在桥接文件中到如需要的OC头文件即可;而在OC中需要Swift的类(如果在Swift中的类不是继承自NSObject或者派生自NSobject, 那么不会生成相应的转换类),直接导入***-swift.h
就可以了,其中***
是Product Module Name
对应的值。
参考地址:
因为学习Swift时间并不长,所以某些地方可能有误,如果发现,请及时告知。
本文为原创文章,未经本人同意,禁止转载
网友评论