iOS swift NSMutableData не имеет appendString члена

Привет я новичок в swift, и я следую учебнику и создаю тот же код, чтобы загрузить изображение . Теперь я использую swift 3, и это похоже на NSMutableData() уже нет appendString доступен способ, что я могу сделать в качестве замены ? Учебник, который я следую здесь http://swiftdeveloperblog.com/image-upload-example/ и мой код это

func createBodyWithParameters(parameters: [String: String]?, filePathKey: String?, imageDataKey: NSData, boundary: String) -> NSData {
       let body = NSMutableData()

        if parameters != nil {
            for (key, value) in parameters! {
                body.("--(boundary)rn")
                body.appendString("Content-Disposition: form-data; name="(key)"rnrn")
                body.appendString("(value)rn")
            }
        }

        let filename = "user-profile.jpg"
        let mimetype = "image/jpg"

        body.appendString(options: <#T##NSData.Base64EncodingOptions#>)("--(boundary)rn")
        body.appendString("Content-Disposition: form-data; name="(filePathKey!)"; filename="(filename)"rn")
        body.appendString("Content-Type: (mimetype)rnrn")
        body.appendString("rn")



        body.appendString("--(boundary)--rn")

        return body
    }

снова проблема с appendString как я получаю ошибку:

значение типа NSMutableData не имеет члена appendString

Я искал способы, но не нашел ни одного и у меня добавить доступный метод, но он не принимает строку.

3 ответов


как указывает @dan в комментариях, этот метод является частью учебника, на который вы смотрите. Это достаточно просто в Swift без определения пользовательского метода.

во-первых, не используйте NSMutableData; вместо этого используйте новый Data struct, который будет либо изменяемым, либо неизменяемым в зависимости от того, используете ли вы var или let:

var body = Data()

затем добавить UTF-8 байт:

body.append(Data("foo".utf8))

(есть и другие String методы для других кодировок, если вам нужно что-то другое, чем UTF-8.)

если вы хотите точное поведение учебника, вот как перевести его метод на Swift 3:

extension Data {
  mutating func append(string: String) {
    let data = string.data(
        using: String.Encoding.utf8,
        allowLossyConversion: true)
    append(data!)
  }
}

…

body.append("foo")

Я бы не рекомендовал этот код, хотя, по двум причинам. Во-первых, преобразование с потерями означает, что ваше приложение может отбрасывать важные данные. Во-вторых, сила разворачивает (data! вместо data) означает, что в случае проблем с кодированием ваше приложение будет сбой вместо отображения полезной ошибки.


extension NSMutableData {

    func appendString(_ string: String) {
        let data = string.data(using: String.Encoding.utf8, allowLossyConversion: true)
        append(data!)
    }
}

эта работа со мной Swift 3


Я решил эту проблему в swift 4, добавив следующие строки после класса ViewController:

extension NSMutableData {
    func appendString(string: String) {
        let data = string.data(using: String.Encoding.utf8, allowLossyConversion: true)
        append(data!)
    }
}

Я имею в виду класс Viewcontroller класс, созданный при добавлении ViewController в ваш проект. пример следующего класса:

   class ViewController2: UIViewController ,UINavigationControllerDelegate , UIImagePickerControllerDelegate{
      // my code
    }