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
}