【问题标题】:UITextField to change API URL in Swift 5UITextField 在 Swift 5 中更改 API URL
【发布时间】:2019-10-01 18:16:42
【问题描述】:

我是新的 iOS 开发者

我想使用文本字段更改 websiteLogo API 以更改 URL。

如何更改带有 *** 的行 在我的视图控制器中有一个 var 和一个文本字段?

使用屏幕截图会更容易理解我想要什么?谢谢 !!!伙计们。 OneDrive 链接。 1drv.ms/u/s!AsBvdkER6lq7klAqQMW9jOWQkzfl?e=fyqOeN

private init() {}
**private static var pictureUrl = URL(string: "https://logo.clearbit.com/:http://www.rds.ca")!**

private var task: URLSessionDataTask?

func getQuote(callback: @escaping (Bool, imageLogo?) -> Void) {

    let session = URLSession(configuration: .default)
        task?.cancel()

    task = session.dataTask(with: QuoteService.pictureUrl) { (data, response, error) in
            DispatchQueue.main.async {

                guard let data = data, error == nil else {
                callback(false, nil)
                return
                }

                guard let response = response as? HTTPURLResponse, response.statusCode == 200 else {
                callback(false, nil)
                return
                }

                let quote = imageLogo(image: data)
                    callback(true, quote)
                    print(data)
                }
        }
    task?.resume()
    }

【问题讨论】:

  • 请分享错误信息是什么。
  • 在我的 .swift 代码中。但我的视图控制器中有文本字段。如何更改我的文本字段内容并更改上面这段代码中的私有图片Url var...谢谢!
  • 你熟悉二传手吗?
  • 不,我会尝试自己了解更多(我总是知道我的 var 的价值,所以我不期望 Init。和类一起玩。我知道答案就在这里但是我还有工作要做才能非常清楚地理解这个 setter!谢谢。如果你想帮助我。请告诉我!
  • 您可以使用IBAction 将您的textField 连接到您的代码,请参见此处:developer.apple.com/library/archive/referencelibrary/…

标签: ios xcode11 swift5


【解决方案1】:

首先,请不要使用屏幕截图来显示您的代码。如果您需要帮助,其他人通常会复制/粘贴您的代码以检查它有什么问题。

您的代码存在一些小问题。我的一些提示:

  1. 以大字母开头,例如 ImageLogo 而不是 imageLogo
  2. 避免静态问题
  3. 避免单例(它们几乎是静态的)
  4. pictureUrl 交给getQuote
struct ImageLogo {
    var image:Data
}

class QuoteService {
    private var task: URLSessionDataTask?

    func getQuote(from pictureUrl:URL, callback: @escaping (Bool, ImageLogo?) -> Void) {
        let session = URLSession(configuration: .default)
        task?.cancel()

        task = session.dataTask(with: pictureUrl) { 
            (data, response, error) in
            DispatchQueue.main.async {
                guard let data = data, error == nil else {
                    callback(false, nil)
                    return
                }

                guard let response = response as? HTTPURLResponse, response.statusCode == 200 else {
                    callback(false, nil)
                    return
                }

                let quote = ImageLogo(image: data)
                callback(true, quote)
                print(data)
              }
        }
        task?.resume()
    }
}

  1. 在视图控制器中存储QuoteService 的实例
  2. 在该实例上致电getQuote,提交pictureUrl
class ViewController : UIViewController {
    var quoteService:QuoteService!

    override func viewDidLoad() {
        self.quoteService = QuoteService()
    }

    func toggleActivityIndicator(shown:Bool) { /* ... */ }
    func update(quote:ImageLogo) { /* ... */ }
    func presentAlert() { /* ... */ }

    func updateconcept() {
          guard let url = URL(string:textField.text!) else {
              print ("invalid url")
              return
          }
          toggleActivityIndicator(shown:true)
          quoteService.getQuote(from:url) {
              (success, quote) in
              self.toggleActivityIndicator(shown:false)
              if success, let quote = quote {
                    self.update(quote:quote)
              } else {
                  self.presentAlert()
              }
          }
    }

    /* ... */

}

希望对你有帮助。

【讨论】:

    【解决方案2】:

    我想你想在 Web 服务中传递 textfield Text(URL Enter By user)

    首先在getQuote 函数定义中添加参数url_str 并在该参数上传递textfield

    fun getQuote(url_str :  String, callback : @escaping(Bool, ImgaeLogo/)->void){
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 2015-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多