小编Dav*_* S.的帖子

Swift元组到可选赋值

我正在Swift中编写一些代码来学习语言.这是我的基类:

import Foundation
class BaseCommand:NSOperation
{
    var status:Int? = nil
    var message:String? = nil

    func buildRequest() -> NSData?
    {
        return nil
    }

    func parseResponse(data:NSData?) -> (Status:Int, Error:String)
    {
        return (200, "Success")
    }

    override func main() {
        let requestBody = self.buildRequest()

        println("Sending body \(requestBody)")
        // do network op
        var networkResultBody = "test"

        var resultBody:NSData = networkResultBody.dataUsingEncoding(NSUTF8StringEncoding)!
        (self.status, self.message) = self.parseResponse(resultBody)
    }
}
Run Code Online (Sandbox Code Playgroud)

问题出在最后一行:

(self.status, self.message) = self.parseResponse(resultBody)
Run Code Online (Sandbox Code Playgroud)

编译器说"无法将元组转换(状态:Int,错误:字符串)表示为(Int?,String?)"

我知道问题是self.status和self.message是可选项,而parseResponse不返回Optionals(我不想要它).如何告诉它进行必要的分配和转换以将数据导入实例变量?

tuples optional ios swift

13
推荐指数
1
解决办法
1728
查看次数

iOS NSURLAuthenticationMethodClientCertificate未请求与ActiveSync服务器

我正在尝试在我正在开发的ActiveSync客户端中实现证书身份验证.使用证书身份验证的代码可能有效,但截至目前服务器,或者更准确地说,iOS库对服务器响应的解释似乎对我不正确.这是我的代码:

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
    NSURLProtectionSpace *protectionSpace = [challenge protectionSpace];
    NSString *authenticationMethod = [protectionSpace authenticationMethod];

    if ([authenticationMethod isEqualToString:NSURLAuthenticationMethodClientCertificate])
    {
        NSURLCredential* credential = [ self buildCredentialClientCert];

        if ( credential == nil )
        {
            [[challenge sender] cancelAuthenticationChallenge:challenge];
        }
        else
        {
            [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];
        }
    }
    else if ([authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust])
    {
        .... // do other stuff
Run Code Online (Sandbox Code Playgroud)

问题是,即使我知道服务器支持客户端证书身份验证,当我设置断点时authenticationMethod,总是设置为NSURLAuthenticationMethodServerTrust.

原始HTTPS服务器响应包含以下内容:

错误代码:403禁止.该页面需要客户端证书作为身份验证过程的一部分.如果您使用的是智能卡,则需要插入智能卡以选择合适的证书.否则,请与服务器管理员联系.(12213)

我的问题是,什么决定如果认证挑战是NSURLAuthenticationMethodServerTrustNSURLAuthenticationMethodClientCertificate

ssl https openssl activesync ios

7
推荐指数
1
解决办法
4437
查看次数

Swift嵌套过滤器优化?

我试图在Swift中做一些使用KVC在Objective-C中很容易做到的事情.iOS9中添加的新Contacts框架在大多数情况下比旧的AddressBook API更容易使用.但通过手机号码找到联系人似乎很困难.提供查找联系人的谓词仅限于名称和唯一标识符.在Objective-C中,您可以获取所有联系人,然后使用NSPredicate过滤KVC查询.结构是:

CNContact-> phoneNumbers - >(String,CNPhoneNumber-> stringValue)

在下面的代码中假设我通过以下方式获取了联系人:

let keys = [CNContactEmailAddressesKey,CNContactPhoneNumbersKey, CNContactFormatter.descriptorForRequiredKeysForStyle(.FullName)]
let fetchRequest = CNContactFetchRequest(keysToFetch: keys)
var contacts:[CNContact] = []
try! CNContactStore().enumerateContactsWithFetchRequest(fetchRequest) { ...
Run Code Online (Sandbox Code Playgroud)

我想将stringValue与已知值进行比较.这是我到目前为止在游乐场所拥有的:

import UIKit
import Contacts

let JennysPhone    = "111-867-5309"
let SomeOtherPhone = "111-111-2222"
let AndAThirdPhone = "111-222-5309"

let contact1 = CNMutableContact()
contact1.givenName = "Jenny"
let phone1 = CNPhoneNumber(stringValue: JennysPhone)
let phoneLabeled1 = CNLabeledValue(label: CNLabelPhoneNumberMobile, value: phone1)
contact1.phoneNumbers.append(phoneLabeled1)

let contact2 = CNMutableContact()
contact2.givenName = "Billy"
let phone2 = CNPhoneNumber(stringValue: SomeOtherPhone)
let …
Run Code Online (Sandbox Code Playgroud)

contacts ios swift swift2

4
推荐指数
1
解决办法
1163
查看次数

Hackerrank Quest-错误还是误解?

我在玩Hackerrank时遇到了这个问题

它写为:

您将得到一个正整数N。必须打印高度为N?1的数字三角形,如下所示:

1
22
333
4444
55555
......
Run Code Online (Sandbox Code Playgroud)

我立即想到的是这种解决方案:

for i in range(1,input()):
    print(str(i)*i)
Run Code Online (Sandbox Code Playgroud)

它将给定的(5)作为输入的第一行输出:

1
22
333
4444
Run Code Online (Sandbox Code Playgroud)

呈件说这是不对的。在我看来,其他被接受的建议不太优雅:

for i in range(1,int(input())):
    print((10**i)//9*i)
Run Code Online (Sandbox Code Playgroud)

输出:

1
22
333
4444
Run Code Online (Sandbox Code Playgroud)

输出是相同的,但是代码很丑陋。为什么这个解决方案可以接受而不是我的?

python

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

GCD swift 4 线程安全

我有一个控制一些资源的功能,例如:

var resource: Int?

func changeSomeResources() {
    resource = 1
    // rewriting keychain parameters
    // working with UIApplication.shared
}
Run Code Online (Sandbox Code Playgroud)

然后我多次将此函数添加到全局线程

DispatchQueue.global(qos: .userInitiated).async {
    changeSomeResources()
}
DispatchQueue.global(qos: .userInitiated).async {
    changeSomeResources()
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,除了竞争条件之外,我是否会遇到一些线程问题?例如,如果两个函数将尝试同时更改资源

grand-central-dispatch swift

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