我是新的iOS开发者
我想使用文本字段更改网站徽标 API 以更改 URL。
如何更改带有 *** 的行 在我的视图控制器中使用 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()
}
首先,请不要使用屏幕截图来显示您的代码。如果您需要帮助,其他人通常会复制/粘贴您的代码以检查它有什么问题。
您的代码存在一些小问题。我的一些提示:
- 用一个大写字母开始你的类型,比如
ImageLogo
不imageLogo
: - 避免静电
- 避免单例(它们几乎是静态的( 将
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()
}
}
- 在视图控制器中存储
QuoteService
的实例 - 在该实例上呼叫
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
按用户输入(
首先在函数定义中添加参数url_str
getQuote
并在该参数上传递textfield
值
fun getQuote(url_str : String, callback : @escaping(Bool, ImgaeLogo/)->void){
}