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

相关推荐
2401_865854887 小时前
iOS应用想要下载到手机上只能苹果签名吗?
后端·ios·iphone
HackerTom19 小时前
iOS用rime且导入自制输入方案
ios·iphone·rime
良技漫谈19 小时前
Rust移动开发:Rust在iOS端集成使用介绍
后端·程序人生·ios·rust·objective-c·swift
2401_8524035519 小时前
高效管理iPhone存储:苹果手机怎么删除相似照片
ios·智能手机·iphone
星际码仔1 天前
【动画图解】是怎样的方法,能被称作是 Flutter Widget 系统的核心?
android·flutter·ios
emperinter1 天前
WordCloudStudio:AI生成模版为您的文字云创意赋能 !
图像处理·人工智能·macos·ios·信息可视化·iphone
关键帧Keyframe1 天前
音视频面试题集锦第 8 期
ios·音视频开发·客户端
pb81 天前
引入最新fluwx2.5.4的时候报错
flutter·ios
KeithTsui2 天前
ZFC in LEAN 之 前集的等价关系(Equivalence on Pre-set)详解
开发语言·其他·算法·binder·swift
袁代码2 天前
Swift 开发教程系列 - 第4章:函数与闭包
ios·swift·ios开发