我目前正在我的应用程序中实现一个 WKWebView,我想使用decidePolicyFor 委托方法来决定我的应用程序如何响应外部链接。
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void) {
if navigationAction.navigationType == WKNavigationType.linkActivated && !(navigationAction.request.url?.host?.lowercased().hasPrefix("www.example.com"))! {
UIApplication.shared.open(navigationAction.request.url!, options: [:], completionHandler:nil)
decisionHandler(.allow)
}
else
{
decisionHandler(.cancel)
}
}
Run Code Online (Sandbox Code Playgroud)
但是,编译器在 swift 3.0 中给了我以下问题:-
实例方法 'webView( :decidePolicyFor:decisionHandler:)' 几乎匹配协议 'WKNavigationDelegate' 的可选要求 'webView( :decidePolicyFor:decisionHandler:)'
有没有人知道这个问题的解决方案,更重要的是为什么会发生这种情况
提前致谢
在我开始之前,请不要烧我,因为我知道这里已经被问了数百次,但没有可靠的答案,但我相信有一个使用后台刷新的解决方案。https://medisafe.com/ app 好像已经解决了!
目标:每x天在指定时间触发本地通知
我的解决方案
第 1 步:从开始日期和奇数发生(本例为 2)天(已编辑)开始获取计时器间隔
第 2 步:在此差异上设置间隔计时器并重复
第 3 步:激活后台刷新(如果应用程序甚至终止,它会在后台加载应用程序并给我一个小窗口来执行一些任务)
步骤 4. 设置后台刷新为每天触发一次
第 5 步:执行 get items api,它将刷新所有计时器和通知
第 6 步坐下来,对我的解决方案惊讶地微笑
但这失败了。
所以一个定时器间隔
let newTrigger = UNTimeIntervalNotificationTrigger(timeInterval: 172800,repeats: true)
Run Code Online (Sandbox Code Playgroud)
但这只会在每天执行后台提取时重置计时器,并且将从现在而不是从开始日期触发 2 天。
因此,必须有一种比较日期小时和分钟(开始日期、x 日期和当前日期)的方法来计算计时器间隔值。
目前我正在使用日历组件。触发每天我做以下事情
var triggerType : DateComponents? {
var triggerT : DateComponents?
var cal = Calendar(identifier: .gregorian)
cal.firstWeekday = 2
if let notificationModel = self.notificationModel {
switch notificationModel.reminderType {
case .daily?, .weekly?:
if let date = notificationModel.date {
triggerT = cal.dateComponents([.weekday, …Run Code Online (Sandbox Code Playgroud) 在过去的几天里,我一直在谷歌搜索并尝试关于 alamofire 的正斜杠的自动转义。
(其中“/path/image.png”变成 "\/path\/image.png")
但是,如果您使用 swiftyJson、通过 httpBody 发送或使用 Alamofire 参数类,那么所有答案都指向解决方案。
https://github.com/SwiftyJSON/SwiftyJSON/issues/440
我没有使用 SwiftyJson 并且觉得安装 API 只是为了解决这个问题是一个用大锤敲钉子的情况。
反正。
我的问题是每当我尝试向 API 发送参数时,Alamofire 的 JSONEncoding.default 都会转义正斜杠。我不希望 Alamofire 这样做。
在我的情况下,我想发送以下参数并让 Alamofire 忽略正斜杠
let parameter : Parameters = ["transaction": "/room/120"]
Alamofire.request(endPoint , method: .post, parameters: parameter ,encoding: JSONEncoding.default , headers: header).validate(statusCode: 200..<300).responseObject { (response: DataResponse<SomeModel>) in
Run Code Online (Sandbox Code Playgroud)
}
也许创建一个自定义的 json 编码器是这样做的方法,但我发现关于如何最好地去做的文档很少。
我也试过
let parameter : [String : Any] = ["transaction": "/room/120"]
Alamofire.request(endPoint , method: .post, parameters: parameter ,encoding: JSONEncoding.default , headers: header).validate(statusCode: 200..<300).responseObject { (response: …Run Code Online (Sandbox Code Playgroud)