【问题标题】:Creating NSData from NSString in Swift在 Swift 中从 NSString 创建 NSData
【发布时间】:2014-07-25 05:55:35
【问题描述】:

我试图最终获得一个带有有效HTTPBodyNSMutableURLRequest,但我似乎无法将我的字符串数据(来自UITextField)转换为可用的NSData 对象。

我已经看到了这种方法的另一种方式:

NSString(data data: NSData!, encoding encoding: UInt)

但我似乎无法为我的用例找到任何文档。如有必要,我愿意将字符串放入其他类型,但使用 Swift 的 NSData 的初始化选项似乎都不是我想要的。

【问题讨论】:

    标签: xcode nsstring nsdata swift nsmutableurlrequest


    【解决方案1】:

    在 Swift 3 中

    let data = string.data(using: .utf8)
    

    在 Swift 2 中(或者如果你已经有一个 NSString 实例)

    let data = string.dataUsingEncoding(NSUTF8StringEncoding)
    

    在 Swift 1 中(或者如果你有一个 swift String):

    let data = (string as NSString).dataUsingEncoding(NSUTF8StringEncoding)
    

    还要注意dataOptional<NSData>(因为转换可能会失败),所以你需要在使用它之前打开它,例如:

    if let d = data {
        println(d)
    }
    

    【讨论】:

    • Swift 可以推断 NSData 类型吗?
    • @NicolasManzini 肯定可以,就像任何其他类型一样。
    • @macdonjo 是的,该 API 随时间而变化,现在它返回一个 Optional<NSData>,您需要在使用前解包
    • 在 Swift2 中,不需要使用 "as" 强制转换,因为它是自动桥接的
    • 转换为 UTF-8 不能失败,因此不需要它的可选绑定,您可以在此处强制解包。
    【解决方案2】:

    斯威夫特 4 & 3

    String 对象创建 Data 对象已在 Swift 3 中更改。现在正确的版本是:

    let data = "any string".data(using: .utf8)
    

    【讨论】:

    • 谢谢。这在 swift 3 中完美地为我工作。 let input = "test string" let xdata = input.data(using: String.Encoding.utf8)
    • 知道为什么 String(data: data!, encoding: .nonLossyASCII) 会为零吗?
    【解决方案3】:

    这里方法很简单

    let data = string.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
    

    【讨论】:

      【解决方案4】:

      斯威夫特 4

      let data = myStringVariable.data(using: String.Encoding.utf8.rawValue)
      

      【讨论】:

      • 不要在 Swift 中使用 NSString
      【解决方案5】:

      在 Swift 5 中

      let data = Data(YourString.utf8)
      

      【讨论】:

        【解决方案6】:
        // Checking the format
        var urlString: NSString = NSString(data: jsonData, encoding: NSUTF8StringEncoding)
        
        // Convert your data and set your request's HTTPBody property
        var stringData: NSString = NSString(string: "jsonRequest=\(urlString)")
        
        var requestBodyData: NSData = stringData.dataUsingEncoding(NSUTF8StringEncoding)!
        

        【讨论】:

          【解决方案7】:

          要创建非可选数据,我建议使用它:

          let key = "1234567"
          let keyData = Data(key.utf8)
          

          【讨论】:

          • 在 Swift 3+ 中这是最有效的方法。
          【解决方案8】:

          Swift 4.2

          let data = yourString.data(using: .utf8, allowLossyConversion: true)
          

          【讨论】:

            【解决方案9】:

            字符串转数据

            extension String {
                func toData() -> Data {
                    return Data(self.utf8)
                }
            }
            

            将数据转换为字符串

            extension Data {
                  func toString() -> String {
                      return String(decoding: self, as: UTF8.self)
                  }
               }
            

            【讨论】:

              猜你喜欢
              • 2010-11-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-08-31
              • 2011-03-02
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多