UITextField 更改 API URL in Swift 5

UITextField to change API URL in Swift 5

我是新手iOS开发者

我想用文本字段更改网站徽标 API 以更改 URL。

我怎样才能用***换行 在我的 viewcontroller?

中有一个 var 和一个文本字段

有了屏幕截图,会更容易理解我想要什么吗?谢谢 !!!伙计们。 OneDriveLink。 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()
    }

首先,请不要使用屏幕截图显示您的代码。如果您需要帮助,其他人通常copy/paste检查您的代码有什么问题。

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

  1. 以大写字母开头,例如 ImageLogo 而不是 imageLogo:
  2. 避免静力学
  3. 避免单例(它们几乎是静态的)
  4. 交在pictureUrlgetQuote
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()
              }
          }
    }

    /* ... */

}

希望对您有所帮助。

我想你想在 Web 服务中传递 textfield 文本(URL 由用户输入)

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

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

}