gpt4 book ai didi

swift - SecIdentity + Force Cast 违规 : Force casts should be avoided. (force_cast)

转载 作者:可可西里 更新时间:2023-11-01 00:39:38 26 4
gpt4 key购买 nike

请不要标记重复的问题。

大家好,

我正在执行 NSURLAuthenticationMethodClientCertificate,我在其中使用以下代码。如果我不使用 swiftlint,哪个代码没问题。但是当我使用 swiftlint 时出现这个错误并且无法解决这个问题。尝试了很多请帮助我。在下面发布代码。

    var items: CFArray?
//let PKCS12Data = DataSourceManager.sharedInstance.serverPolicyManager?.PKCS12Data
securityError = SecPKCS12Import(certData, options, &items)

if securityError == errSecSuccess {
let certItems: CFArray = items as CFArray!
let certItemsArray: Array = certItems as Array
let dict: AnyObject? = certItemsArray.first
if let certEntry: Dictionary = dict as? Dictionary<String, AnyObject> {

// grab the identity
let identityPointer = certEntry["identity"]
let secIdentityRef = identityPointer as! SecIdentity
print("\(String(describing: identityPointer)) :::: \(secIdentityRef)")
// grab the trust
let trustPointer: AnyObject? = certEntry["trust"]
let trustRef: SecTrust? = trustPointer as! SecTrust
print("\(String(describing: trustPointer)) :::: \(trustRef)")
// grab the cert
let chainPointer: AnyObject? = certEntry["chain"]
identityAndTrust = IdentityAndTrust(identityRef: secIdentityRef, trust: trustRef!, certArray: chainPointer!)

}

}

我在以下几行中遇到了强制施法违规行为。

让 secIdentityRef = identityPointer 为!安全身份

让 trustRef:SecTrust? = 信任指针作为!安全信托

最佳答案

基本上,您所做的是强制向下转换,这意味着您保证您的 identityPointertrustPointerSecIdentity 的对象,并且SecTrust 类。但如果他们不是呢?您将它们作为 AnyObject 从字典中取出,因此通常它们可能不会强制转换为目标类。 Swiftlint 告诉您,强制转换是一种不好的做法,希望您避免它。

但是,对于 CoreFoundation 类型,您似乎不能使用条件转换 as?,因此强制转换是您唯一的选择。对于这种特殊情况,您可以在添加特殊注释的代码中禁用 Swiftlint 规则。

let secIdentityRef = identityPointer as! SecIdentity // swiftlint:disable:this force_cast

为了安全起见,您还可以通过检查 Core Foundation“type id”来检查对象的身份:

guard let identityPointer = certEntry["identity"],
CFGetTypeID(identityPointer) == SecIdentityGetTypeID() else {
// here you know that the cast will fail
}
let secIdentityRef = identityPointer as! SecIdentity // swiftlint:disable:this force_cast

关于swift - SecIdentity + Force Cast 违规 : Force casts should be avoided. (force_cast),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46729750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com