记录自己Swift 开发遇到的小问题

由于之前没有用过Swift开发应用,所以使用纯Swift从0开始一个项目,还是会遇到一些不理解的问题的。

本文仅作为我在使用Swift过程中遇到的问题,以及解决方法。仅仅作为自己记录用。 不保证正确,只是记录一下自己理解的过程,后续再来看可能又发现了问题,也可能会觉得这都是啥问题,太基础了,那时候好特么菜啊。

其他人可能也看不懂怎么回事,云里雾里的。 先大概记录下自己的理解,后续再来整理纠正。

1、# selecter 方法怎么传递参数? 目前会能传一个。。 ------ 解决办法: 想传多个参数,直接写可能不好写或报错了。 那就先写func 方法,然后在# selecter里去调这个方法,多少参数都行啦😄

2、导航栏默认透明色?? 按系统设置。iOS 15之后新特性,必须设置。

3、自定义导航栏,push到下一个界面,怎么自定义返回导航栏? - 还是要用一个BaseNavigationVC

4、自定义View,传参数进来, 闭包回调。 可以用属性didSet方式,如果数据已经有了,在初始化方法中添加参数。

5、使用Moya请求,Task设置方式: 如果参数是拼在URL后面的 就用return .requestParameters(parameters: params, encoding: URLEncoding.default) 如果参数是放body里面的, 就用 return .requestParameters(parameters: paramsDict, encoding: JSONEncoding.default)方式

Get 请求URL入参问题: 到现在我还是采用在BaseUrl里方式, 后端URL没支持Decode吗是因为? 有特殊字符就不行???

www.jianshu.com/p/32a56897c...

Moya请求入参支持直接传数组类型 解决方案:

www.jianshu.com/p/19f3d0273...

Moya网络请求相关:

1、入参问题 - 支持数组入参。

2、拼接参数问题- 直接将参数拼接在URL后面,有特殊字符?&等,解析失败。 后端处理URL没有做Decode?

3、参数类型。------ 如果是拼在URL后面的 就用 URLEncode 如果参数是放body里面的 就用 JSONEncoding.default。

4、解析:

A。如果使用Codable解析, Model定义属性类型必须与接口返回的类型一致,即使有一个对不上,也会解析失败

B。如果有值就返回,没有值就返回null的,要定义为可选型,可选型就不用加默认值了。 但要注意,这个可选型也必要要与接口有值时返回的类型一致。

C。其他确定会返回的值,定义为非可选,给一个默认值,解析有值会覆盖的。

D。如果是返回数据data可能为null情况,请求发起就不用再ViewModel里了。不然回调回数据来判空不方便,因为callback了model回来,model都有默认值或可选值,model肯定不为nil了。 直接在VC里发起请求,回来数据直接判nil。

E。使用HandyJson解析时候,属性不与接口返回的类型一致貌似也可以解析成功。 都定义成非可选也行。 ------ 要去验证下,属性类型与接口不一致可不可以!!!!=== 可以的,最后为你定义的类型,自动做了转化吗?。。

F。如果返回的data都可能是null,成功就是简单的一个值。 就不用定义新的Model了,直接使用AnyCodable接就行了。

G。基于上面那种情形,请求入参Model要用Model?.self这样可选。

H。如果数据是data: [{},{}]这种,请求的入参Model就是[model].self 即可。

I。设置Model时,不管属性定义为是否可选型,如设置了默认值,有值就覆盖,没有就显示默认值。 定义为可选型,没设置默认值(实际也不用设置),有值返回就解析,没有就都是nil

J。定义Model时,多几个属性、少几个没有关系。 但是不确定类型的必须定义为可选型,而且这个可选型类型必须与有值返回的类型一致。

H5与原生交互方面:

1、如果我想在加载H5之前就给H5传点什么东西,使用

php 复制代码
let script = WKUserScript(source: "window.platform = 'iOS'", injectionTime: .atDocumentStart, forMainFrameOnly: true)
configuration.userContentController.addUserScript(script) 

这样就能告诉H5是iOS平台了。

1.1如果想加载完成H5后发送消息,通过

ini 复制代码
let script = "window.webkit.messageHandlers.messageHandler.postMessage('Hello, H5!')"
webView.evaluateJavaScript(script, completionHandler: nil) 

这个方法给H5发送一个消息。其中window.webkit.messageHandlers.messageHandler.postMessage 这个方法是自定义的,也就是H5写的方法,随便叫什么名称都行,约定好一致即可。

2、如果想处理H5的某些事件。 我们先和H5约定好事件名称,通过configuration.userContentController.add(self, name: "MessageHandle")这个方法约定好。 然后在代理方法

swift 复制代码
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        switch message.name {
            case "MessageHandle":
                print("处理handle数据")
            default: break
        }
    }

这里判断做相应的处理就好了.

友盟不支持真机调试解决方案:

www.jianshu.com/p/32917b7db...

第一次从头到尾申请设置苹果证书相关:

blog.csdn.net/niubitianpi...

JSBridge 方案

juejin.cn/post/684490...

Json字符串互转

www.cnblogs.com/CoderEYLee/...

拍照:

完全自定义相机

www.jianshu.com/p/8b28892ba... blog.csdn.net/u011146511/...

codeantenna.com/a/XbVsJMZku...

条形码扫码

github.com/sunflowerse...

github.com/chenjie1219...

微信支付:

developers.weixin.qq.com/doc/oplatfo...

// 具体步骤

pay.weixin.qq.com/wiki/doc/ap...

demo

www.jianshu.com/p/1b744a97e...

相关推荐
键盘敲没电4 小时前
【IOS】GCD学习
学习·ios·objective-c·xcode
SY.ZHOU4 小时前
Significant Location Change
macos·ios·cocoa
吴Wu涛涛涛涛涛Tao12 小时前
深入理解 Swift Codable:从基础到进阶
ios
大熊猫侯佩14 小时前
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(三)
数据库·swiftui·swift
大熊猫侯佩14 小时前
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(二)
数据库·swiftui·swift
大熊猫侯佩14 小时前
用异步序列优雅的监听 SwiftData 2.0 中历史追踪记录(History Trace)的变化
数据库·swiftui·swift
大熊猫侯佩14 小时前
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(一)
数据库·swiftui·swift
Jouzzy18 小时前
【iOS安全】iPhone X iOS 16.7.11 (20H360) WinRa1n 越狱教程
安全·ios·iphone
二流小码农1 天前
鸿蒙开发:实现一个标题栏吸顶
android·ios·harmonyos
season_zhu1 天前
iOS开发:关于日志框架
ios·架构·swift