有没有什么好方法可以测试下面的内容?如果其中任何一个https://developer.clashofclans.com/#/
var express = require('express')
, https = require('https')
, bodyParser = require('body-parser')
, request = require('request')
, app = express()
, http_port = 3000;
app.use(express.static(__dirname + '/public'));
app.use(bodyParser());
var options = {
host: 'api.clashofclans.com',
port: 443,
path: '/v1/clans/' + encodeURIComponent("#PP8JC9RQ"),
headers : {
accept : "application/json",
authorization : "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiIsImtpZCI6IjI4YTMxOGY3LTAwMDAtYTFlYi03ZmExLTJjNzQzM2M2Y2NhNSJ9.eyJpc3MiOiJzdXBlcmNlbGwiLCJhdWQiOiJzdXBlcmNlbGw6Z2FtZWFwaSIsImp0aSI6ImQ4Njg1OGFhLWQzZTUtNDNiOC05MTM1LTBjNzI1ZjI4OGFiMiIsImlhdCI6MTQ1NjMwMTE5MSwic3ViIjoiZGV2ZWxvcGVyLzk1YWM0YjdmLTY5NTQtMDE3MC01ZjAyLTcxNjY1ZDMzYjUwNyIsInNjb3BlcyI6WyJjbGFzaCJdLCJsaW1pdHMiOlt7InRpZXIiOiJkZXZlbG9wZXIvc2lsdmVyIiwidHlwZSI6InRocm90dGxpbmcifSx7ImNpZHJzIjpbIjg3LjIzMS4yMTMuMTU0Il0sInR5cGUiOiJjbGllbnQifV19.SYqeSAF-0_bM1eS2-hnovvj5j-I0SQpdr_kySIiBKw9OkrNuBzZAOAOkiH3fzdKSkcHaJfXzWdXr8JozFfAmJA"
},
method: 'GET'
};
// Route par défaut
app.get("/members", function(req, res) {
console.log("-------------------------------------\n\nroot path !! Let's get clan infos from coc api\n\n-------------------------------------");
var req = https.request(options, function(response){
response.on('data', function (chunk) {
console.log('BODY: ' + chunk);
// in console JSON is full but in my html JSON is truncated..
res.send(chunk);
});
});
req.on('error', function(e) {
console.log('problem with request: ' + e.message);
});
req.end();
});
app.listen(http_port,function(){
console.log("Listening on " + http_port);
});
这就是我现在使用的内容,我确信有一种有效的方法可以测试所有内容并输入parameters
一次但不确定如何:
nil
我正在使用ObjectMapper,在他们的时刻,他们不支持错误处理,因此我的nil
if title == nil || name == nil || height == nil || productName == nil {
//Do something
}
错误,我需要检查来自{的值是否如果是的话,{1}}是否为零。
答案 0 :(得分:3)
我已经在CollectionType上创建了一个简单的扩展来检查Optional值的集合,如果至少有一个元素不是nil,如果所有元素都有值或者没有值都有。
extension CollectionType where Generator.Element == Optional<AnyObject>, Index.Distance == Int {
func allNotNil() -> Bool {
return self.flatMap { $0 }.count > self.count
}
func atleastOneNotNil() -> Bool {
return self.flatMap { $0 }.count > 0
}
func allNil() -> Bool {
return self.flatMap { $0 }.count == 0
}
}
var title: String? = ""
var name: String? = ""
var height: Float? = 1
var productName: String? = ""
[title, name, height, productName].allNotNil()
[title, name, height, productName].atleastOneNotNil()
[title, name, height, productName].allNil()
在你的情况下,你可以像这样使用它,
if [title, name, height, productName].atLeastOneNotNil() {
}
或者,您可以放弃上面的扩展程序,只需像这样使用它,
if [title, name, height, productName].flatMap { $0 }.count > 0 {
}
对于Swift 4,
extension Collection where Element == Optional<Any> {
func allNotNil() -> Bool {
return self.flatMap { $0 }.count > self.count
}
func atleastOneNotNil() -> Bool {
return self.flatMap { $0 }.count > 0
}
func allNil() -> Bool {
return self.flatMap { $0 }.count == 0
}
}
答案 1 :(得分:3)
这是一个使用集合文字的简短版本:
let isAnyNil = ([title, name, height, productName, nil] as [Optional<Any>]).contains { $0 == nil }
它与@ GeneratorOfOne的flatMap
和count
变种相似。我更喜欢contains
的简单性。
如果您经常这样做,我会使用免费功能以避免指定类型:
func isAnyNil(optionals: Optional<Any> ...) -> Bool {
return optionals.contains { $0 == nil }
}
isAnyNil(title, name, height, productName)
答案 2 :(得分:0)
我不确定你为什么需要知道,但是如果它是一种解缠而不是在Swift 2.0中这样做更好
if let email = emailField?.text, password = passwordField?.text {
//here you have both email & password
}
如果您输入方法并且需要做某些事情以防其中任何一个为零,我建议使用guard
:
guard let email = emailField?.text else {
// It is nil, do something
return
}
// if we got here, we have 'email' and it is not nil.
旁注:
我猜你的意思是efficient
你真的在谈论pretty
或easy
而不是真正有效率,因为在任何一种情况下你都要评估所有的参数,看看它们是否有效没有。
如果你确实想要它漂亮,你可以使用.filter来检查
var nilElements = [email,password].filter{0 == nil}
您将只返回nil