由于之前没有用过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传点什么东西,运用

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

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

1.1假如想加载完结H5后发送音讯,通过

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")这个办法约定好。
然后在代理办法

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…