2016-09-20 2 views
4

Итак, я возился с платформой iMessages, и для отправки данных другому пользователю данные должны быть отправлены как URLComponentsURL. Однако я не могу понять, как отправить словарь для использования в качестве значения messages.url.Как создать URL-адрес с помощью Словаря в Swift

func createMessage(data: dictionary) { 

    /* 

    The Dictionary has 3 values, 1 string and two arrays. 

    let dictionary = ["title" : "Title Of Dictionary", "Array1" : [String](), "Array2" : [String]() ] as [String : Any] 

    */ 


    let components = URLComponents() 

    let layout = MSMessageTemplateLayout() 
    layout.image = UIImage(named: "messages-layout.png")! 
    layout.imageTitle = "\(dictionary["title"])" 

    let message = MSMessage() 
    message.url = components.url! 
    message.layout = layout 

    self.activeConversation?.insert(message, completionHandler: { (error: Error?) in 
     print("Insert Message") 
    }) 
} 

ли кто-нибудь знает, как я могу отправить словарные значения, как URLQueryItems в URLComponents, чтобы сохранить как message.url?

PS: Мне было интересно, возможно ли создать расширение для URL-адреса для хранения словаря, вот что я безуспешно пытаюсь атаковать.

ответ

7

Вот фрагмент кода, чтобы преобразовать словарь в URLQueryItems:

let dictionary = [ 
    "name": "Alice", 
    "age": "13" 
] 

func queryItems(dictionary: [String:String]) -> [URLQueryItem] { 
    return dictionary.map { 
     // Swift 3 
     // URLQueryItem(name: $0, value: $1) 

     // Swift 4 
     URLQueryItem(name: $0.0, value: $0.1) 
    } 
} 

var components = URLComponents() 
components.queryItems = queryItems(dictionary: dictionary) 
print(components.url!) 
+0

Swift 4 обновление: 'функ queryItems (словарь: [String : String]) -> [URLQueryItem] { return dictionary.map { URLQueryItem (имя: $ 0.0, значение: $ 0.1) } } ' – palme

+0

@palme спасибо. Я обновил код с помощью вашего фрагмента. –

1

Вы можете использовать следующую URLComponents расширение:

extension URLComponents{ 
    var queryItemsDictionary : [String:Any]{ 
     set (queryItemsDictionary){ 
      self.queryItems = queryItemsDictionary.map { 
       URLQueryItem(name: $0, value: "\($1)") 
      } 
     } 
     get{ 
      var params = [String: Any]() 
      return queryItems?.reduce([:], { (_, item) -> [String: Any] in 
       params[item.name] = item.value 
       return params 
      }) ?? [:] 
     } 
    } 
} 

и установить компоненты URL:

var url = URLComponents() 
url.queryItemsDictionary = ["firstName" : "John", 
          "lastName" : "Appleseed"] 
0

Вы можете использовать библиотеку iMessageDataKit. Это крошечное, полезное расширение MSMessage для установки/получения Int, Bool, Float, Double, String и Array значения для ключей.

Это делает установку и получение данных очень легко, как:

let message: MSMessage = MSMessage() 

message.md.set(value: 7, forKey: "user_id") 
message.md.set(value: "john", forKey: "username") 
message.md.set(values: ["joy", "smile"], forKey: "tags") 

print(message.md.integer(forKey: "user_id")!) 
print(message.md.string(forKey: "username")!) 
print(message.md.values(forKey: "tags")!) 

(Отказ от ответственности: Я автор iMessageDataKit)

Смежные вопросы