小编Sha*_*awn的帖子

如何在集成请求 (AWS APIGateway) 中取消转义请求路径

我正在用 Swift 3 编写一个移动应用程序,并使用 AWS APIGateway、Lambda 和 RDS。在 POST 方法中,我在正文的元素之一中传递唯一标识符,例如:

us-east-1:xxxxxxxx-55b0-4917-82e3-85b3b093fa9c

但是,在 GET 方法中,我使用请求路径来检索此用户记录并传递此值。但是,我猜测它正在被编码,因为它是请求路径并导致:

us-east-1%3Axxxxxxxx-55b0-4917-82e3-85b3b093fa9c

一旦以这种方式到达 Lambda(以及我的 RDS),由于冒号的逃逸,它将找不到记录。因此,我可以在集成请求模板中“取消转义”该值吗?

我尝试过一个模板,例如:

#set($inputRoot = $input.path('$'))
{
    "user_identity" : "$util.decodeURIComponent($input.params('useridentity'))"
}
Run Code Online (Sandbox Code Playgroud)

然而,这是行不通的。我在日志中收到以下内容:

Thu Aug 17 02:32:47 UTC 2017 : HTTP Method: GET, Resource Path: /user/us-east-1%3Axxxxxxxx-55b0-4917-82e3-85b3b093fa9c
Thu Aug 17 02:32:47 UTC 2017 : Endpoint request body after transformations: {
   "user_identity" : ""
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用decodeURI,但这给了我相同的结果。我在这里缺少什么?

json amazon-web-services aws-lambda aws-api-gateway

5
推荐指数
1
解决办法
1025
查看次数

在委托方法中使用默认行为将UITextField子类化的设计方法

我已经对UITextField类进行了子类化,因此我可以为我的应用程序提供一些内置功能。我更改了外观,仅为UX设计提供了下划线边框。另外,我想在有选择器(选择列表,日期/时间选择器)的情况下使用此控件。在这些情况下,我想防止编辑但仍然需要响应触摸事件。为此,我添加了可检查的属性以从IB控制它。

通过执行以下操作,我可以轻松阻止复制/粘贴菜单的出现:

    override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
    if isFirstResponder && disableEditing {
        DispatchQueue.main.async(execute: {
            (sender as? UIMenuController)?.setMenuVisible(false, animated: false)
        })
        return false
    }

    return super.canPerformAction(action, withSender: sender)
}
Run Code Online (Sandbox Code Playgroud)

但是,在选择器中选择某些内容后,我需要防止它们在文本字段中键入或删除字符。通常,您将使用以下委托方法:

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    return false
}
Run Code Online (Sandbox Code Playgroud)

问题是如何在子类中提供这种默认行为?您可以执行以下操作:

self.delegate = self
Run Code Online (Sandbox Code Playgroud)

但是,这会导致各种各样的缺点,所以这不是一个好的解决方案。

另一种解决方案是实现一个基本的UIViewController子类(MyBaseViewController),但是稍后将导致复杂的代码。

最好有一种干净的方法以封装的方式提供这种默认行为。

显然,还有许多其他方法可以解决此问题(即在10个视图控制器中编写相同的代码)。本质上,在子类化控件时,似乎应该有一种方法可以重用委托代码。

有人有想法么??

uitextfield ios uitextfielddelegate swift

2
推荐指数
1
解决办法
394
查看次数