2016-05-23 18 views
5

Tôi muốn thêm Int giá trị cho multipartFormData:Làm thế nào gia tăng giá trị Int để tải lên Alamofire thông số

Alamofire.upload(.POST, 
       url, 
       headers: headers, 
       multipartFormData: { multipartFormData in 
        //add some jpg image 
        //add other vaues: 
        for (key, value) in parameters { 
         if value is String { 
          multipartFormData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key) 
         } else if value is Int { 
          let convertedValueNumber: NSNumber = NSNumber(int: value.intValue) 
          let data = NSKeyedArchiver.archivedDataWithRootObject(convertedValueNumber) 
          multipartFormData.appendBodyPart(data: data, name: key) 
         } 
        } 

    }, encodingCompletion: { encodingResult in 
     //some processing 
}) 

Nhưng lỗi máy chủ trở lại mà tôi không gửi Int giá trị. Làm cách nào để thêm giá trị Int vào thông số?

+0

bạn có tùy chọn nhập int vào chuỗi. –

+0

Máy chủ của bạn đang thực sự mong đợi 'nhị phân nhị phân NSKeyedArchiver'?!? Hầu hết các lần, máy chủ sẽ chỉ mong đợi một biểu diễn chuỗi của giá trị số. – Rob

+0

@Rob Tôi đã cố gắng chuyển đổi mà không có NSKeyedArchiver tôi đã sử dụng let data = NSData (byte: & vInt, length: sizeof (Int)) multipartFormData.appendBodyPart (dữ liệu: dữ liệu, tên: khóa) Và điều này không giúp được –

Trả lời

12

NSKeyedArchiver rất tò mò. Thông thường, bạn sẽ chỉ cần gửi chuỗi đại diện, ví dụ:

Alamofire.upload(.POST, URL, headers: headers, multipartFormData: { multipartFormData in 
    //add some jpg image 
    //add other values: 
    for (key, value) in parameters { 
     if value is String { 
      multipartFormData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key) 
     } else if value is Int { 
      multipartFormData.appendBodyPart(data: "\(value)".dataUsingEncoding(NSUTF8StringEncoding)!, name: key) 
     } 
    } 
}, encodingCompletion: { encodingResult in 
    //some processing 
}) 

Hoặc, thậm chí đơn giản hơn, vì chuỗi suy làm việc với cả hai StringInt:

Alamofire.upload(.POST, URL, headers: headers, multipartFormData: { multipartFormData in 
    //add some jpg image 
    //add other values: 
    for (key, value) in parameters { 
     if value is String || value is Int { 
      multipartFormData.appendBodyPart(data: "\(value)".dataUsingEncoding(NSUTF8StringEncoding)!, name: key) 
     } 
    } 
}, encodingCompletion: { encodingResult in 
    //some processing 
}) 

Hoặc, trong Alamofire 4 với Swift 3:

Alamofire.upload(multipartFormData: { multipartFormData in 
    //add some jpg image 
    //add other values: 
    for (key, value) in parameters { 
     if value is String || value is Int { 
      multipartFormData.append("\(value)".data(using: .utf8)!, withName: key) 
     } 
    } 
}, to: url, method: .post, headers: headers, encodingCompletion: { encodingResult in 
    //some processing 
}) 
+0

Cảm ơn nhưng tôi có một câu hỏi nếu giá trị có thể là '[String]', '[String: Any]' ... nếu có thể có nhiều loại, vì vậy tôi nên cho mỗi loại tạo khối là? – Chlebta

+1

Hoặc bạn có thể có phương thức đơn này chấp nhận cả hai hoán vị, ví dụ tham số 'Bất kỳ?' Và sau đó làm 'nếu cho tham số = tham số như? [String] {...} else nếu tham số = tham số là? [Chuỗi: Chuỗi] {...} 'hoặc bất kỳ thứ gì. – Rob

Các vấn đề liên quan