我正在尝试为类创建一个可用的初始化程序.我的类将使用来自网络请求的输入进行初始化.网络不可靠,我想创建一个初始化程序,检查所有属性的存在,否则它将失败.
我试图在这里使用警卫,所以请随意指出方法中的任何明显错误:
public class JobModel {
let jobId: String
let status: String
let toName: String
let toAddress: String
let description: String
let fee: Int
let jobDate: NSDate
let fromName: String
let fromAddress: String
init?(job: [String:AnyObject]) throws {
guard self.jobId = job["jobid"] as! String else {
throw InitializationError.MissingJobId
}
}
}
Run Code Online (Sandbox Code Playgroud)
该guard self.jobId行无法编译,错误:
Ambiguous reference to member 'subscript'
有关如何纠正此错误的任何想法?
我们正在开发iOS 8.0及更高版本的应用程序.此应用程序需要身份验证(或用户注册).在网站上,我们使用html表单注册和登录用户.这些形式是敏感的.用户还可以单击"使用Facebook登录"按钮以使用FB凭据登录.这个按钮是用FB的SDK for Javascript(v2.4)实现的
因此,我们不希望在我们的iOS应用程序上实现注册和日志的本机屏幕,但我们宁愿实现一个带有WKWebView元素的视图控制器来处理这种浏览体验.
但是,我们注意到,当用户点击"使用Facebook登录我"按钮时,没有任何反应.FB打开以询问用户登录和授予权限的典型弹出窗口永远不会出现.
以下是我们如何初始化WKWebView:
class LoginViewController: UIViewController, WKNavigationDelegate, WKUIDelegate {
var webView: WKWebView
@IBOutlet weak var cancelButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(webView)
webView.setTranslatesAutoresizingMaskIntoConstraints(false)
let height = NSLayoutConstraint(item: webView, attribute: .Height, relatedBy: .Equal, toItem: view, attribute: .Height, multiplier: 1, constant: 0)
let width = NSLayoutConstraint(item: webView, attribute: .Width, relatedBy: .Equal, toItem: view, attribute: .Width, multiplier: 1, constant: 0)
view.addConstraints([height, width])
loadDefaultUrl()
}
required init(coder aDecoder: NSCoder){
let config = WKWebViewConfiguration()
config.preferences.javaScriptCanOpenWindowsAutomatically = …Run Code Online (Sandbox Code Playgroud) 函数是否支持在消费计划中使用客户端证书授权访问函数?类似于此处描述的方法?基本上,如果调用方没有提供有效的客户端证书,我正在寻找函数运行时立即拒绝连接请求,而我不必在代码中实现该授权例程。
我正在使用AngularJS构建一个应用程序,其主页显示用户5个视频.然后,用户可以单击其中任何一个以开始播放.
浏览器当前正在为页面中显示的每个html5视频元素下载所有源视频文件.这种情况发生在Chrome和FireFox上,但不适用于IE 11.
这是应用程序的代码
AngularJS应用初始化
var app = angular.module("hdv", ['ngCookies', 'infinite-scroll']).config(function ($interpolateProvider, $sceDelegateProvider) {
$sceDelegateProvider.resourceUrlWhitelist([
'self',
'https://*.vo.msecnd.net/**',
'https://*.domain.com/**'
]);
$interpolateProvider.startSymbol('[[[').endSymbol(']]]');
});
Run Code Online (Sandbox Code Playgroud)
我使用$ sceDelegateProvider将不同的来源列入白名单,因为视频源文件是通过CDN提供的(其域名明显不同于我的页面的uri).
html5视频元素使用customer指令构建:
app.directive("aVideo", function($http){
return {
template: '<video controls width="100%" ng-attr-poster=[[[post.creative.media.poster]]] ng-attr-preload="metadata" ng-src="[[[post.creative.media.uri]]]" ng-attr-type="[[[post.creative.media.contentType]]]"></video>',
scope:{
post: "=",
},
link: function(scope, element, attrs) {
$(element).find("video").on("play", function () {
$http.post('/post/' + scope.post.creative.cuid + '/views?_csrf=' + csrfToken)
.success(function(data){
})
.error(function(error){
});
});
},
}
});
Run Code Online (Sandbox Code Playgroud)
请注意,视频元素都设置了preload = metadata属性,因此不应开始下载源文件.
如上所示,源文件取自范围对象"[[[post.creative.media.uri]]]".通过调试,我逐渐意识到触发下载的是resourceUrlWhitelist方法.如果我删除白名单,则不再下载视频文件(但由于$ sce不安全错误,也不会在浏览器中显示).此外,如果我在每个"post"对象上使用$ sce"resourceUrl"方法设置此uri,则浏览器将下载整个文件.
似乎每当使用$ sce将域或文件的来源列入白名单时,浏览器就会下载整个文件,而不是相应的事实,即它是视频元素的来源,因此应该遵守preload属性.
我想从社区获得有关如何解决此问题的意见,因为每次用户下载我的主页时,他们的浏览器都会下载大约500mb他们不需要的视频数据.
我正在测试一个.NET Core 2.0应用程序,该应用程序使用Service Bus SDK从事件中心检索消息.我设置了一个控制台应用程序,并打算将该应用程序作为Docker容器运行.
此方法创建将读取消息的事件主机处理器:
private static async Task MainAsync(string[] args)
{
Console.WriteLine("Registering EventProcessor...");
var eventProcessorHost = new EventProcessorHost(
EhEntityPath,
PartitionReceiver.DefaultConsumerGroupName,
EhConnectionString,
StorageConnectionString,
StorageContainerName);
// Registers the Event Processor Host and starts receiving messages
Console.WriteLine("Retrieving messages");
await eventProcessorHost.RegisterEventProcessorAsync<EventProcessor>();
Console.WriteLine("Sleeping");
Thread.Sleep(Timeout.Infinite);
}
Run Code Online (Sandbox Code Playgroud)
由于在类中实现的事件处理器EventProcessor将是处理事件的事件处理器,我试图阻止控制台应用程序在处理器的注册完成时退出.
但是,我找不到一种可靠的方法来保持应用程序的活力.如果我按原样运行此容器,我在输出窗口中看到的只有:
Registering EventProcessor...
Retrieving messages
Sleeping
Run Code Online (Sandbox Code Playgroud)
并且没有收到任何消息.
我的应用程序有一个登录屏幕.如果用户按下登录按钮而未在用户名或密码字段中输入任何文本,则应用程序将显示带有错误消息的UIAlert.
我试图在UI测试中模拟这个逻辑,并想断言UIAlert正在显示正确的消息.但是,我找不到一种方法让UI Test访问Alert的message属性.这是测试记录器生成的代码:
func testLoginWithoutPasswort() {
let app = XCUIApplication()
let emailTextField = app.textFields["email"]
emailTextField.tap()
emailTextField.typeText("xxx@gmail.com")
app.buttons["Login"].tap()
app.alerts["Error"].collectionViews.buttons["OK"].tap()
}
Run Code Online (Sandbox Code Playgroud)
反正我是否可以提取UIAlert消息String的值,所以我可以对它进行断言?
我正在经历在Xcode 7上将我的swift项目更新为Swift 2.0的过程.xcode在构建项目时报告了以下错误:
Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc failed with exit code 1
这种情况发生在SwiftyJSON或SwiftSpinner框架上(编译器似乎首先随机选择一个并失败,因此错误会在其中一个或另一个上间歇性地报告).我已将这些框架更新到他们的xcode7/swift2兼容分支,但该项目仍然无法编译.
只是想知道这是否是其他人在使用cocoa pods框架依赖项升级项目时所看到的情况,或者这是否是编译器错误
我正在设置WooCommerce以在创建订单时触发webhook.我已将webhook的URL设置为我们为此目的设置的本地Web API的URL:
http://localhost:3000/store/orders/new
Run Code Online (Sandbox Code Playgroud)
WooCommerce确实使用正确的数据有效负载触发webhook,但在webhook的日志中报告请求失败:
Status: HTTP http_request_failed Es wurde keine gültige URL übermittelt.: Array
Run Code Online (Sandbox Code Playgroud)
从德语翻译,意思是"没有通过有效的URL"
然后我将URL更改为我们的API(https://xxx.azurewebsites.net/store/order/new)的面向Web的部署,并且API 收到了webhook而没有任何问题.
我不确定WC webhook是否不适合使用自定义端口的网址(在我的情况下,端口3000),所以我想询问是否这是真的问题以及是否有办法制作WC webhooks与localhost开发环境一起玩得很好.
我从一个woocommerce网站收到webhooks到nodejs/express应用程序.我试图验证webhook的签名以证明真实性,但我计算的哈希永远不会对应于woocommerce在钩子的签名头中报告的签名.
这是我用来验证真实性的代码:
function verifySignature(signature, payload, key){
var computedSignature = crypto.createHmac("sha256", key).update(payload).digest('base64');
debug('computed signature: %s', computedSignature);
return computedSignature === signature;
}
Run Code Online (Sandbox Code Playgroud)
使用以下参数调用此函数:
var signature = req.headers['x-wc-webhook-signature'];
verifySignature(signature, JSON.stringify(req.body), config.wooCommence.accounts.api[config.env].webhookSecret)
Run Code Online (Sandbox Code Playgroud)
webhook的签名标题将签名报告为BewIV/zZMbmuJkHaUwaQxjX8yR6jRktPZQN9j2+67Oo=.然而,上述操作的结果是S34YqftH1R8F4uH4Ya2BSM1rn0H9NiqEA2Nr7W1CWZs=
我已经在webhook上手动配置了秘密,正如您在上面的代码中所看到的,这个相同的秘密也在快速应用程序中进行了硬编码.因此,要么我正在使用错误的有效负载来计算签名,要么还有其他可疑的东西阻止我验证这些签名.
非常感谢帮助我解决这个问题的任何指示.
我正在开发NodeJS应用程序。有一个特定的RESTful API(GET),当用户触发该API时,它要求服务器执行大约10到20个网络操作才能从不同来源获取信息。所有这些网络操作都是异步回调,一旦它们全部完成,结果将由nodejs应用程序合并并发送回客户端。所有这些操作都是通过async.map函数并行启动的。
我只想了解一下,因为nodejs是单线程的,并且不使用多核计算机(至少不是没有集群),所以当节点有许多回调要处理时,节点如何扩展?回调的实际处理是取决于节点的单线程是否空闲,还是与主线程并行处理回调?
我问的原因是,我看到我的20个回调的性能从第一个回调降到了最后一个。例如,第一个网络操作(从10到20)需要141毫秒才能完成,而最后一个网络操作则需要约4秒钟(以从执行该功能到函数的回调返回值或一个错误)。它们都是相同的网络操作,因此命中相同的数据源,因此数据源不是瓶颈。我知道一个事实,即数据源响应单个请求所花费的时间不超过200ms。
我找到了这个线程,所以在我看来,一个线程需要处理所有回调和即将出现的新请求。
所以我的问题是,对于将触发许多回调的操作,优化其性能的最佳实践是什么?