Network Image
216
작성한 질문수 1
가르쳐 주시는대로 따라 만들고 있는데
user의 이름부분의 데이터는 잘 가져오는데
Image load 부분에서 이미지가 오지않는경우는 어떻게 해야하나여? .resume도 하고.. 제가 봤을때는 아무 문제 없어 보이는데..
혹시 파일 따로 받을수는 없나요?
답변 2
0
안녕하세요
파일은 따로 준비되어 있지 않습니다.
안되는 부분 올려주시면 한번 확인해 보겠습니다.
0
// Image
class ImageLoader: ObservableObject {
// Fields
@Published var image : UIImage?
var urlString : String
init(urlString: String) {
self.urlString = urlString
// URL 가져온후 function 호출
self.loadImageFromURL()
}
func loadImageFromURL(){
guard let url = URL(string: urlString) else {
return
}
URLSession.shared.dataTask(with: url) { (data, response, error) in
guard let hasData = data else {
return
}
guard let loadImage = UIImage(data: hasData)else{
return
}
// Background Thread 로 되면 안되서. 비동기 방식으로 해야함 _> self.image = loadImage 이거만 적으면 안됨.
DispatchQueue.main.async {
self.image = loadImage
}
}.resume()
}
}
// Protocol
struct URLImage: View {
@ObservedObject var loader: ImageLoader
// 위의 function을 쓸려면 View에서 URL넣는게 강제사항이 되버리는 경우다.
init(urlString : String) {
self.loader = ImageLoader(urlString: urlString)
}
var body: some View{
// image data를 받아오기전에 실패 해버렸을 경우 Optional
Image(uiImage: loader.image ?? UIImage(named: "placeholderImage")! )
.resizable()
.aspectRatio(contentMode: .fit)
}
}// Image
class ImageLoader: ObservableObject {
// Fields
@Published var image : UIImage?
var urlString : String
init(urlString: String) {
self.urlString = urlString
// URL 가져온후 function 호출
self.loadImageFromURL()
}
func loadImageFromURL(){
guard let url = URL(string: urlString) else {
return
}
URLSession.shared.dataTask(with: url) { (data, response, error) in
guard let hasData = data else {
return
}
guard let loadImage = UIImage(data: hasData)else{
return
}
// Background Thread 로 되면 안되서. 비동기 방식으로 해야함 _> self.image = loadImage 이거만 적으면 안됨.
DispatchQueue.main.async {
self.image = loadImage
}
}.resume()
}
}
// Protocol
struct URLImage: View {
@ObservedObject var loader: ImageLoader
// 위의 function을 쓸려면 View에서 URL넣는게 강제사항이 되버리는 경우다.
init(urlString : String) {
self.loader = ImageLoader(urlString: urlString)
}
var body: some View{
// image data를 받아오기전에 실패 해버렸을 경우 Optional
Image(uiImage: loader.image ?? UIImage(named: "placeholderImage")! )
.resizable()
.aspectRatio(contentMode: .fit)
}
}// Image
class ImageLoader: ObservableObject {
// Fields
@Published var image : UIImage?
var urlString : String
init(urlString: String) {
self.urlString = urlString
// URL 가져온후 function 호출
self.loadImageFromURL()
}
func loadImageFromURL(){
guard let url = URL(string: urlString) else {
return
}
URLSession.shared.dataTask(with: url) { (data, response, error) in
guard let hasData = data else {
return
}
guard let loadImage = UIImage(data: hasData)else{
return
}
// Background Thread 로 되면 안되서. 비동기 방식으로 해야함 _> self.image = loadImage 이거만 적으면 안됨.
DispatchQueue.main.async {
self.image = loadImage
}
}.resume()
}
}
// Protocol
struct URLImage: View {
@ObservedObject var loader: ImageLoader
// 위의 function을 쓸려면 View에서 URL넣는게 강제사항이 되버리는 경우다.
init(urlString : String) {
self.loader = ImageLoader(urlString: urlString)
}
var body: some View{
// image data를 받아오기전에 실패 해버렸을 경우 Optional
Image(uiImage: loader.image ?? UIImage(named: "placeholderImage")! )
.resizable()
.aspectRatio(contentMode: .fit)
}
}
////-----////-----////-----////-----////-----////-----////-----////-----////-----////-----
ContentView
////-----////-----////-----////-----////-----////-----////-----////-----////-----////----
NavigationLink(
destination:
UserDetailView(user: user),
label: {
HStack
{
URLImage(urlString: user.avatar)
.frame(width: /*@START_MENU_TOKEN@*/100/*@END_MENU_TOKEN@*/, height: /*@START_MENU_TOKEN@*/100/*@END_MENU_TOKEN@*/)
Text("\(user.name)")
Spacer()NavigationLink(
destination:
UserDetailView(user: user),
label: {
HStack
{
URLImage(urlString: user.avatar)
.frame(width: /*@START_MENU_TOKEN@*/100/*@END_MENU_TOKEN@*/, height: /*@START_MENU_TOKEN@*/100/*@END_MENU_TOKEN@*/)
Text("\(user.name)")
Spacer()
0
안녕하세요
좀 확인을 해봤는데 제가 강의 예시로 든 mockapi 사이트의 image url이 제대로 나오질 않네요.
mockapi사이트를 무료로 테스트하면서 제한이 있는건가 싶네요.
코드상에서는 문제는 없는걸로 보입니다.
커스텀 팝업 사용하는 방법
0
266
1
Grid View 강의에서 animation 질문
0
371
1
iOS 16 ScrollView에서 proxy.scrollTo 오류
0
610
2
10 list section 강의 잘린건가요?
0
356
2
Conflicting arguments to generic parameter 'Content' 에러 질문
0
819
1
tickCount에러 문의
0
378
1
Picker를 사용해서 각 item별로 다른 값을 Core Data에 저장하려고 합니다.
0
234
0
강의 파일 다운로드
0
370
2
Grid강의 듣다가 궁금해서 글 남깁니다
0
269
1
sceneDelegate
0
293
1
ClockNumber 에러발생
0
385
2
강의 순서 문의
0
235
1
grid 질문 있습니다!
0
243
1
안녕하세요
0
275
1
LazeVGrid 관련 문의드립니다
0
212
1
질문 드립니다.
0
194
1
버튼과 토글에서 State관련 문의
0
245
1
UIView vs. UIViewController 질문입니다.
0
377
1
선생님. 질문드립니다.
0
289
1
앱개발하다가 궁금한 부분이 생겨서 질문 드립니다
0
265
1
기존 앱개발하다가 해당 강의를 듣는 도중 궁금한 부분이 생겨서 여쭤봅니다.
0
271
1
바인딩 값에 특정 하나의 값을 할당하기
0
284
3
1234567 곱하기 2를 계산을 하면 2.46913e+06 이렇게 나오네요???
0
282
2
ForEach 의 값을 어레이에서 받아왔는데요. 스크롤뷰리더로 감싸면 리프레쉬가 안됩니다.
0
274
1





