这个采用markdown 的形式来写
as as? as! 的区别和用法。网上一些逗逼。写的毛玩意啊 就知道copy 粘贴 和猪 有什么区别 ,猪不能随便变成人, 而他们隔三差五就便成猪, 例子才是最好的老师 真是一群猪
as 用法
// as 用法 1
let str:String = "www.shuaige.com"
//( str as NSString) 这样 str 从String 转变成 NSString 类型 所有才能调用OC的这个方法 .substring(to: Int)
// (str as NSString).substring(to: 3) 返回的还是 String 类型
let subStr = (str as NSString).substring(to: 3)
// as 用法 2
// 这个很明显是类型推导 如果赋值的时候字典元素存储的值的类型不一样 需要转换成字典 as [String : Any] 字典的类型就变成了 [String : Any] 类型
let dict1 = ["name":"tianbin","age":19,"height":1.88] as [String : Any]
as! 用法
// 1.使用数组保存信息 数组的第一个元素很明显是String 类型 但是整个数组是 [Any] 类型
let infoArr:[Any] = ["tianbinbin",27,185]
// infoArr[0] 通过as! 从任意类型 转换成String 类型
let nameStr = infoArr[0] as! String
// as! 的用法。转成具体类型
// 注意:如果转换不成功 那么程序会崩溃
// 建议: 如果确定转换成功 在用as! 平时不建议
as?
// as? as!
let dict :[String:Any] = ["name":"tianbin","age":18,"height":1.98]
let name = dict["name"]
// 通过 as? 转成可选类型
// as? : 转成的类型是一个可选类型,系统会自动判断name 是否可以转成String?,如果可以转成,那么可以获取字符串 如果不能转成 那么设置为nil
let tempName = name as? String
// 第一种写法
if let tempname = tempName {
print(tempname)
}
// 第二种写法
if let tempname = dict["name"] as? String {
print(tempname)
}
autoresizingMask = UIViewAutoresizingNone 这个用法在swift 3.0 失效了 ???
@escaping. 逃逸 闭包 的用法 先记着 后续我查一下
swift 运行时机制
今天学习到一个新的东西 比如说当我们需要截取系统的某一个方法的时候 比如 我们pushviewcontroller 的时
候 可以滑动屏幕左侧 一小块区域实现滑动返回,但是如果要让你实现滑动屏幕任意一个地方都能实现返回,并且不是单单是一
个屏幕,整个app 都能实现滑动返回,我以前写我们的项目的时候是在window 上添加了一个手势view 实现的,但是又一个
很大的弊端,手势冲突 比如和scrollview tableview collectionview 以及你自己添加的手势 这样修改起来特别麻烦
,今天我学习到了一个新的方法 我们可以拿到系统的pop 手势 拿到pop 就代表能拿到view 毕竟pop是添加带view 上的
然后我们需要拿到 target 和 action。而系统有些方法和属性是没有暴露出来的,这时候我们可以用运行时机制
去查找对应的方法 action 和 target 这里呢 我们可以通过属性的类型查看所有的属性名称(系统有些属性名称没有暴露
给我们,所以我们看不到,这时候可以去遍历) 我最近在写斗鱼直播 因为用的是swift3.0 所以我就直接用swift 介绍
了 oc 的是一样的 如果你回swift 那么 oc 也会用 如果不会 那么请百度一下关键字也能用
//1. 获取系统的pop 手势
guard let sysetmGes = interactivePopGestureRecognizer else {return}
//2. 获取手势添加到的view中
guard let gestView = sysetmGes.view else { return }
//3. 获取系统 target action
//3.1 利用运行时机制 查看所有的属性名称
// 系统没有把一个属性暴露给我们 而我们又想用它 就是通过截取
var count:UInt32 = 0
// 通过属性类型 遍历所有的属性名称 ivars保存的是所有属性的地址
let ivars = class_copyIvarList(UIGestureRecognizer.self, &count)
for i in 0..<count{
let ivar = ivars?[Int(i)]
//1. 获取属性的名字
let name = ivar_getName(ivar)
//2. 将指针转换成字符串
print(String(cString: name!))
}
如果你看到这里对这个很感兴趣,但是还不是很明白 可以参考我的斗鱼直播地址:https://github.com/tianbinbin/DouYuShow
控制器为CustomViewController 这里有完整的代码 欢迎点赞
1.0 JS 交互
今天有人问我 JS 交互 时间长了有点淡了 所以重新复习一下
// 1. 原生交互 这个库是apple iOS7 之后推出来的库 实现网页与原生的交互问题
#import <JavaScriptCore/JavaScriptCore.h>
1.0 初始化webview 对象
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"js and Native";
// 2. 创建webview 对象
self.CustomwebView=[[UIWebView alloc]initWithFrame:self.view.bounds];
self.CustomwebView.delegate=self;
//添加webview到当前viewcontroller的view上
[self.view addSubview:self.CustomwebView];
//网址
NSString *httpStr=@"https://www.baidu.com";
NSURL *httpUrl=[NSURL URLWithString:httpStr];
NSURLRequest *httpRequest=[NSURLRequest requestWithURL:httpUrl];
[self.CustomwebView loadRequest:httpRequest];
}
1.5 webview 有四个代理. 感觉写起来还是比较麻烦 还是参考我的github 我已简单演示了一下。看代码的 会更容易理解 有详细的注释 不会让你失望的github:https://github.com/tianbinbin/JS-OC
2.0 小知识点
NSString * str1 = @"tianbin";
NSString * str2 = @"tianbin";
if(str1 == str2){
NSLog(@" == 成立 %p ----- %p",str1,str2);
}
if([str1 isEqualToString:str2])
{
NSLog(@" isEqualToString 成立 ");
}
这两种情况都成立 值一样 存储的地址一样
输出结果
== 成立 0x1074aa2e8 ----- 0x1074aa2e8
3.0. ApplePay
3.1 ApplePay 相比于支付宝支付和微信支付有什么不同?
目前ApplePay 支持iphone6 以上 ios8(最好ios9)以上。ApplePay 线上线下都能支付 注意:可以支付的时候可以无需联网,这点微信、支付宝是不行的,ApplePay 是基于NFC 环境下的 微信、支付宝是基于二维码 相比于他们ApplePay 更好 更简单
4.0 Apple In purchasing 苹果内购
4.1 链接到 iTunes Connect -> 选择协议、税务和银行业务 具体呢参考网络上的这里我就不写了 参考github:http://www.jianshu.com/p/86ac7d3b593a 然后你需要在 我的App内添加 app 购买的项目 包含 参考名称 类型 产品ID 别忘了在用户和职能里面添加测试账号
具体的Apple In purchasing 的代码 我上传到GitHub:晚上回去上传