
AnyClass 代表任意实例的类型
Any 代表任意的类型
t2是MetaData地址,
LGTeacher . self 是AnyClass或AnyObject
Self 类型不是特定类型,⽽是让您⽅便地引⽤当前类型,⽽⽆需重复或知道该类型的名称。
在协议声明或协议成员声明中,Self 类型是指最终符合协议的类型。
作为⽅法的返回类型, 作为只读下标的返回类型,作为只读计算属性的类型
type(of: value) 动态类型分析
test函数调用之前, value 的类型是Any
test函数调用之后, value 的类型是Int
swift调用c函数
1.第一种方式
TestC.c
xxx.swift
2.第二种方式,桥接文件
swift Runtime
1.对于纯 Swift 类来说,⽅法和属性不加任何修饰符的情况下。这个时候其实已经不具备我们所谓的 Runtime 特性了,这和我们在上⼀节课的⽅法调度(V-Table调度)是不谋⽽合的。
2.对于纯 Swift 类,⽅法和属性添加 @objc 标识的情况下,当前我们可以通过 Runtime API 拿到, 但是在我们的 OC 中是没法进⾏调度的。
3.对于继承⾃ NSObject 类来说,如果我们想要动态的获取当前的属性和⽅法,必须在其声明前添加 @objc 关键字,否则也是没有办法通过 Runtime API 获取的。
4.纯swift类没有动态性,但在⽅法、属性前添加dynamic修饰,可获得动态性。
5.继承⾃NSObject的swift类,其继承⾃⽗类的⽅法具有动态性,其它⾃定义⽅法、属性想要获得动 态性,需要添加dynamic修饰。
6.若⽅法的参数、属性类型为swift特有、⽆法映射到objective-c的类型(如Character、Tuple),则 此⽅法、属性⽆法添加dynamic修饰(编译器报错)
Mirror
反射就是可以动态获取类型、成员信息,在运⾏时可以调⽤⽅法、属性等⾏为的特性
获取成员信息
封装
lldb打印
Demo
1. unsafeBitCast 可以指针之间转换
2.swift_getTypeByMangledNameInContext swift标准库c函数
3.协议读取Any类型,通过关键字Self,读取真实类型的值
4.读取指针+偏移量的值
UnsafeMutablePointer(mutating: UnsafeRawPointer(p).advanced(by: numericCast(offset)).assumingMemoryBound(to: Pointee.self))
CAPI.h
第一部分 使用Swift语言开发LBS应用1、下载iOS地图SDK的最新版本
2、申请LBS密钥(见第二部分)。
3、xCode新建工程
新建一个 Single View Application 工程。注意:Language 选择 Swift
4、工程配置
a.引入地图库&搜索库
左侧目录中选中工程名,在 TARGETS->Build Phases->Link Binary With Libaries 中点击“+”按钮,在d出的窗口中点击“Add Other”按钮,选择解压后的 MAMapKit.framework 文件添加到工程中。
搜索库的添加方法同上。
b.引入AMap.bundle资源文件
AMap.bundle资源文件中存储了定位、默认大头针标注视图等图片,可利用这些资源图片进行开发。
左侧目录中选中工程名,在右键菜单中选择Add Files to “工程名”…,从 MAMapKit.framework->Resources 文件夹中选择 AMap.bundle文件,并勾选“Copy items if needed”复选框,单击“Add”按钮,将资源文件添加到工程中。
c.引入系统库
左侧目录中选中工程名,在TARGETS->Build Settings->Link Binary With Libaries中点击“+”按钮,在d出的窗口中查找并选择所需的库(见下表),单击“Add”按钮,将库文件添加到工程中。
备注中,2D表示使用2D栅格地图需要的系统文件,3D表示使用3D矢量地图需要的系统文件、Search表示使用搜索库需要的系统文件。
SystemConfiguration.framework、CoreTelephonySecurity.framework、Security.framework 是为了统计app信息使用。
d.Swift编译配置
首先:新建桥接头文件(放在工程路径下),这里命名为 AMapDemoSwift-Bridging-Header.h,在该头文件中import需要的库文件,代码如下:
#import <MAMapKit/MAMapKit.h>
#import <AMapSearchKit/AMapSearchAPI.h>
然后,左侧目录中选中工程名,在 TARGETS->Build Phases->Swift Compiler - Code Generation ->Objective-C Briding Header 中输入桥接文件的路径
5、地图的显示
以3D矢量地图SDK为例,进行介绍。
在 ViewController.swift 中,继承 MAMapViewDelegate 协议,在 viewDidLoad 方法中配置用户Key,初始化 MAMapView 对象,并添加到 Subview中。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)