You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Xcode中使用Swift语言对接Walmart API开发iOS应用?

嘿,我之前刚好做过Walmart API的Swift集成,给你一步步拆解核心步骤,应该能帮你快速上手:

1. 先搞定基础配置
  • 首先得有Walmart的API密钥,去官方开发者平台申请即可。
  • 打开Xcode里的Info.plist,确保ATS(App Transport Security)允许访问Walmart的API域名——Walmart API用的是HTTPS,一般默认允许,但如果遇到报错,可以添加例外配置:
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>walmartlabs.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <false/>
            </dict>
        </dict>
    </dict>
    
  • 记好核心API端点,比如商品搜索接口是https://api.walmartlabs.com/v1/search
2. 定义Codable模型解析响应

Swift的Codable是解析JSON最省心的方式,先写好和Walmart API响应匹配的模型:

// 单个商品模型
struct WalmartProduct: Codable {
    let itemId: Int
    let name: String
    let salePrice: Double?
    let imageUrl: String?
    let productUrl: String?
    // 其他需要的字段可以根据API文档补充
}

// 搜索响应的根模型
struct WalmartSearchResponse: Codable {
    let items: [WalmartProduct]
    let totalResults: Int?
}

注意:字段名要和API返回的JSON键完全一致,有大小写差异的话可以用CodingKeys做映射

3. 编写网络请求代码

用原生URLSession实现就行,不需要依赖第三方库,写一个复用的API服务类:

class WalmartAPIService {
    private let apiKey: String
    
    init(apiKey: String) {
        self.apiKey = apiKey
    }
    
    // 搜索商品的方法
    func searchProducts(query: String, completion: @escaping (Result<WalmartSearchResponse, Error>) -> Void) {
        guard var components = URLComponents(string: "https://api.walmartlabs.com/v1/search") else {
            completion(.failure(NSError(domain: "WalmartAPI", code: -1, userInfo: [NSLocalizedDescriptionKey: "无效的URL"])))
            return
        }
        
        // 添加查询参数
        components.queryItems = [
            URLQueryItem(name: "apiKey", value: apiKey),
            URLQueryItem(name: "query", value: query),
            URLQueryItem(name: "numItems", value: "20") // 控制返回商品数量
        ]
        
        guard let url = components.url else {
            completion(.failure(NSError(domain: "WalmartAPI", code: -1, userInfo: [NSLocalizedDescriptionKey: "URL构建失败"])))
            return
        }
        
        let task = URLSession.shared.dataTask(with: url) { data, response, error in
            if let error = error {
                completion(.failure(error))
                return
            }
            
            guard let data = data else {
                completion(.failure(NSError(domain: "WalmartAPI", code: -2, userInfo: [NSLocalizedDescriptionKey: "未获取到数据"])))
                return
            }
            
            do {
                let decoder = JSONDecoder()
                let searchResponse = try decoder.decode(WalmartSearchResponse.self, from: data)
                completion(.success(searchResponse))
            } catch {
                completion(.failure(error))
            }
        }
        task.resume()
    }
}
4. 在界面中调用并展示结果

比如在你的ViewController里初始化API服务,调用搜索方法并刷新UI:

class ProductSearchViewController: UIViewController {
    private let walmartAPI = WalmartAPIService(apiKey: "你的API密钥")
    private var products: [WalmartProduct] = []
    
    // 假设你有一个UITableView展示商品
    @IBOutlet weak var productTableView: UITableView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        productTableView.dataSource = self
        // 示例:搜索"笔记本电脑"
        searchProducts(query: "laptop")
    }
    
    private func searchProducts(query: String) {
        walmartAPI.searchProducts(query: query) { [weak self] result in
            DispatchQueue.main.async {
                switch result {
                case .success(let response):
                    self?.products = response.items
                    self?.productTableView.reloadData()
                case .failure(let error):
                    print("搜索失败:\(error.localizedDescription)")
                    // 这里可以给用户展示错误提示弹窗
                }
            }
        }
    }
}

// 实现UITableViewDataSource
extension ProductSearchViewController: UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return products.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "ProductCell", for: indexPath)
        let product = products[indexPath.row]
        cell.textLabel?.text = product.name
        cell.detailTextLabel?.text = product.salePrice.map { "$\($0)" } ?? "价格未知"
        // 可以用SDWebImage等库加载商品图片,这里简化处理
        return cell
    }
}
一些关键注意事项
  • API调用限制:Walmart API有请求次数配额,开发阶段别超量,生产环境可能需要申请更高额度
  • 错误处理:上面是基础错误处理,实际开发可以细化错误类型(比如API返回的错误码),给用户更友好的提示
  • 测试验证:先用Postman或curl测试API请求是否能拿到正确响应,再搬到Swift代码里,排查问题更高效
  • 隐私安全:别把API密钥硬编码到代码里,用Xcode配置文件或密钥管理工具存储,避免提交到版本控制

内容的提问来源于stack exchange,提问作者user8474913

火山引擎 最新活动