那里。我是 Swift 的初学者,正在尝试将旧程序转换为 Swift3。我设法修复了一堆错误,但我无法使该功能正常工作。
fileprivate func extractEntitlements(_ entitlementData: Data) -> NSDictionary? {
var originalEntitlementsData = entitlementData
let xmlStart = "<?xml".data(using: String.Encoding.ascii, allowLossyConversion: true)
let bytes = (originalEntitlementsData as NSData).bytes
for i in 0...(originalEntitlementsData.count - xmlStart!.count) {
if memcmp((xmlStart! as NSData).bytes, bytes + i, Int(xmlStart!.count)) == 0 {
let end = originalEntitlementsData.count - i
**originalEntitlementsData = originalEntitlementsData.subdata(in: NSMakeRange(i, end))**
break;
}
}
return NSString(data: originalEntitlementsData, encoding: String.Encoding.ascii.rawValue)?.propertyList() as? NSDictionary
这是我得到的错误:
关于这个错误有很多问题,但我没有成功实现解决方案。关于我应该如何进行的任何提示?
谢谢大家!
最佳答案
范围在 swift 中同时更复杂和更简单。
你想要subdata(in: start..<end)
, 这使得 Range<Int>
,这是您需要的类型。但是,在这种情况下 start
和 end
引用范围的开始和结束索引,而不是传递给 NSMakeRange()
的位置和长度.
关于swift - 无法将类型 'NSRange'(又名“_NSRange”)的值转换为预期参数类型 'Range<Data.Index>'(又名“Range<int>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43938866/