记录自己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...

相关推荐
程序猿看视界2 小时前
如何在 UniApp 中实现 iOS 版本更新检测
ios·uniapp·版本更新
dr李四维6 小时前
iOS构建版本以及Hbuilder打iOS的ipa包全流程
前端·笔记·ios·产品运营·产品经理·xcode
️ 邪神6 小时前
【Android、IOS、Flutter、鸿蒙、ReactNative 】自定义View
flutter·ios·鸿蒙·reactnative·anroid
比格丽巴格丽抱18 小时前
flutter项目苹果编译运行打包上线
flutter·ios
网络安全-老纪19 小时前
iOS应用网络安全之HTTPS
web安全·ios·https
今天啥也没干21 小时前
使用 Sparkle 实现 macOS 应用自定义更新弹窗
前端·javascript·swift
1024小神21 小时前
tauri2.0版本开发苹果ios和安卓android应用,环境搭建和最后编译为apk
android·ios·tauri
lzhdim1 天前
iPhone 17 Air看点汇总:薄至6mm 刷新苹果轻薄纪录
ios·iphone
安和昂1 天前
【iOS】知乎日报第四周总结
ios
yngsqq1 天前
037集——JoinEntities连接多段线polyline和圆弧arc(CAD—C#二次开发入门)
开发语言·c#·swift