Swift 无法转换类型为';NSRange';(aka';u NSRange';)到预期的参数类型';范围<;数据索引>';(又名&x27;范围<;内部>;
我是Swift的初学者,正在尝试将一个较旧的程序转换为Swift3。我已经设法修复了一系列错误,但我无法让这个函数工作Swift 无法转换类型为';NSRange';(aka';u NSRange';)到预期的参数类型';范围<;数据索引>';(又名&x27;范围<;内部>;,swift,swift3,Swift,Swift3,我是Swift的初学者,正在尝试将一个较旧的程序转换为Swift3。我已经设法修复了一系列错误,但我无法让这个函数工作 fileprivate func extractEntitlements(_ entitlementData: Data) -> NSDictionary? { var originalEntitlementsData = entitlementData let xmlStart = "<?xml".data(using: String.Encoding.a
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
fileprivate func提取权限(uu-authoritmentdata:Data)->NSDictionary{
var originalentlementsdata=权利数据
让xmlStart=“范围在swift中同时更加复杂和简单
您需要subdata(in:start..,正如@jrturton已经说过的,subdata(in:)
接受一个Range
参数,
应该如此
originalEntitlementsData = originalEntitlementsData.subdata(in: i..<i+end)
var originalEntitlementsData = entitlementData
let xmlStart = "<?xml".data(using: .utf8)!
if let range = originalEntitlementsData.range(of: xmlStart) {
originalEntitlementsData = originalEntitlementsData.subdata(in: range.lowerBound..<originalEntitlementsData.endIndex)
// Alternatively:
// originalEntitlementsData.removeSubrange(0..<range.lowerBound)
}