我需要这个 C# 代码的 Swift 代码

Posted

技术标签:

【中文标题】我需要这个 C# 代码的 Swift 代码【英文标题】:I need a Swift code for this C# Code 【发布时间】:2018-07-27 14:32:08 【问题描述】:

我用 C#(Xamarin) 编写了一个从 API 获取令牌的休息服务。我在 Swift 中需要相同的代码,我试图到处寻找,但找不到任何可靠的东西。看看下面的代码

public class RestService


    HttpClient client;

    public RestService()
    
        client = new HttpClient();
        client.MaxResponseContentBufferSize = 256000;
        client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded "));
    
    public async Task<Token> Login(User user)
    
        string webUrl = Utility.AppConstant.ApiUrl + "/token";
        var postData = new List<KeyValuePair<string, string>>();
        postData.Add(new KeyValuePair<string, string>("grant_type", "password"));
        postData.Add(new KeyValuePair<string, string>("username", user.Username));
        postData.Add(new KeyValuePair<string, string>("password", user.Password));
        var content = new FormUrlEncodedContent(postData);
        var response = await PostResponseLogin<Token>(webUrl, content);
        return response;
    
    public async Task<T> PostResponseLogin<T>(string webUrl, FormUrlEncodedContent content) where T : class
    
        try
        
            var response = await client.PostAsync(webUrl, content);
            var jsonResult = response.Content.ReadAsStringAsync().Result;
            var responseObject = JsonConvert.DeserializeObject<T>(jsonResult);
            return responseObject;
        
        catch 
         return null; 
    

【问题讨论】:

有什么特别的事情你不知道该怎么做吗?我们不会为你写的 这里恐怕不是代码外包 这样的 Swift 例子不胜枚举。不过,您可能不会在这里找人将您的代码重写为 Swift。 【参考方案1】:

Alamofire 让事情变得非常简单。

您的登录代码如下所示:

let parameters: Parameters = [
      "grant_type":"password",
      "username":user.Username,
      "password":user.Password
   ]
Alamofire.request(AppConstant.ApiUrl + "/token", method: .post, parameters: parameters) response in 

    // do something with the response


有很多选项可以满足您的任何需求,包括反序列化。

【讨论】:

我的 C# 代码中的内容使用语句 var content = new FormUrlEncodedContent(postData); 进行编码. 中的 Alamofire.request(AppConstant.ApiUrl + "/token", method: .post, parameters: parameters) 响应会做同样的事情吗? 我相信form url encoding是默认的,但是可以用encoding参数指定。 github.com/Alamofire/Alamofire/blob/master/Documentation/…

以上是关于我需要这个 C# 代码的 Swift 代码的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Swift 不像 Java 或 C# 那样对属性使用 getter 和 setter?

如何使用 Swift 从 URL 获取 HTML 源代码

在 C# 序列化中,我需要序列化引用其他 DLL 中的对象而没有源代码的对象

Xcode 7 beta调试器没有在Swift代码的断点处显示变量值

为啥大括号在 C# 代码上需要时间?

Swift 代码正在向核心数据添加不需要的零数据