swift - 无法将类型 'NSRange'(又名“_NSRange”)的值转换为预期参数类型 'Range<Data.Index>'(又名“Range<int>

标签 swift swift3

那里。我是 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

这是我得到的错误:

Cannot convert value of type 'NSRange'(aka'_NSRange') to expected argument type 'Range<Data.Index>' (aka 'Range<int>')

关于这个错误有很多问题,但我没有成功实现解决方案。关于我应该如何进行的任何提示?

谢谢大家!

最佳答案

范围在 swift 中同时更复杂和更简单。

你想要subdata(in: start..<end) , 这使得 Range<Int> ,这是您需要的类型。但是,在这种情况下 startend引用范围的开始和结束索引,而不是传递给 NSMakeRange() 的位置和长度.

关于swift - 无法将类型 'NSRange'(又名“_NSRange”)的值转换为预期参数类型 'Range<Data.Index>'(又名“Range<int>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43938866/

相关文章:

ios - 我试图通过协议(protocol)从不同的 UIViewController 调用一个函数,但我在委托(delegate)上得到的是 nil - 这里可能是什么情况?

IOS 应用程序将图像保存在内存中

swift - 将图像从 documentDirectory 加载到 UICollectionView - 滚动时滞后

ios - swift 3 图 : FILTER and CONTAINS for Entities

ios - 如何在不破坏从中分离的类的情况下以编程方式进行分离

ios - XCode 6.3 生成无效的 iOS 应用程序存档

ios - corebluetooth 和 ios 状态

ios - 无法将 'AppDelegate' 分配给 'UNUserNotificationCenterDelegate'

ios - 快速改变图像的色调

ios - 我在哪里放置 iOS 8 + Swift 中的常用实用程序函数