# Challenge: Create Async GooglyEyes | raywenderlich.com

**URL:** <https://forums.kodeco.com/t/challenge-create-async-googlyeyes-raywenderlich-com/114119>\
**Category:** 🎓 Courses & Articles\
**Created:** [July 6, 2020, 2:54pm UTC](https://forums.kodeco.com/t/challenge-create-async-googlyeyes-raywenderlich-com/114119 "2020-07-06T14:54:24Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![audrey](https://assets.chunter.kodeco.com/user_avatar/forums.kodeco.com/audrey/32/111607_2.png) [@audrey](https://forums.kodeco.com/u/audrey)\
**Post date:** [July 6, 2020, 2:54pm UTC](https://forums.kodeco.com/t/challenge-create-async-googlyeyes-raywenderlich-com/114119/1 "2020-07-06T14:54:24Z")

</div>

* * *
This is a companion discussion topic for the original entry at [https://www.raywenderlich.com/9461083-ios-concurrency-with-gcd-and-operations/lessons/8](https://www.raywenderlich.com/9461083-ios-concurrency-with-gcd-and-operations/lessons/8)

---

<div class="post-metadata">

**Author:** ![amurad](https://assets.chunter.kodeco.com/user_avatar/forums.kodeco.com/amurad/32/110937_2.png) [@amurad](https://forums.kodeco.com/u/amurad)\
**Post date:** [December 18, 2020, 12:33pm UTC](https://forums.kodeco.com/t/challenge-create-async-googlyeyes-raywenderlich-com/114119/2 "2020-12-18T12:33:25Z")

</div>

Hi Audrey  
I am wondering if creating a strong ref to weak self in closure capture list is necessary? is it only to get rid of question marks when using weak self within the closure?  
Many Thanks:)

---

<div class="post-metadata">

**Author:** ![audrey](https://assets.chunter.kodeco.com/user_avatar/forums.kodeco.com/audrey/32/111607_2.png) [@audrey](https://forums.kodeco.com/u/audrey)\
**Post date:** [December 19, 2020, 1:43am UTC](https://forums.kodeco.com/t/challenge-create-async-googlyeyes-raywenderlich-com/114119/3 "2020-12-19T01:43:51Z")

</div>

hi Ahmad! it’s to make sure `self` still exists, in case the user has moved away from this view controller.

Swift 5.3 removes the need to use `self.` in some closures.

---

<div class="post-metadata">

**Author:** ![amurad](https://assets.chunter.kodeco.com/user_avatar/forums.kodeco.com/amurad/32/110937_2.png) [@amurad](https://forums.kodeco.com/u/amurad)\
**Post date:** [December 26, 2020, 5:36pm UTC](https://forums.kodeco.com/t/challenge-create-async-googlyeyes-raywenderlich-com/114119/4 "2020-12-26T17:36:25Z")

</div>

Many thanks Audrey 🙂

---

<div class="post-metadata">

**Author:** ![shrutisharma](https://assets.chunter.kodeco.com/user_avatar/forums.kodeco.com/shrutisharma/32/81494_2.png) [@shrutisharma](https://forums.kodeco.com/u/shrutisharma)\
**Post date:** [February 3, 2021, 11:08pm UTC](https://forums.kodeco.com/t/challenge-create-async-googlyeyes-raywenderlich-com/114119/5 "2021-02-03T23:08:23Z")

</div>

Hi Audrey

Thank you for the tutorial. I have a question here.  
Is it required to call **self.fadeInNewImage(overlayImage)** in DispatchQueue.main since in the asyncGooglyEyes() we are calling the completion handler on the main queue itself.

Thanks

---

<div class="post-metadata">

**Author:** ![audrey](https://assets.chunter.kodeco.com/user_avatar/forums.kodeco.com/audrey/32/111607_2.png) [@audrey](https://forums.kodeco.com/u/audrey)\
**Post date:** [February 4, 2021, 12:56am UTC](https://forums.kodeco.com/t/challenge-create-async-googlyeyes-raywenderlich-com/114119/6 "2021-02-04T00:56:06Z")

</div>

hi Shruti! you’re right, the Main Thread Checker doesn’t complain when I comment out DispatchQueue.main in the completion handler.

---

<div class="post-metadata">

**Author:** ![shrutisharma](https://assets.chunter.kodeco.com/user_avatar/forums.kodeco.com/shrutisharma/32/81494_2.png) [@shrutisharma](https://forums.kodeco.com/u/shrutisharma)\
**Post date:** [February 4, 2021, 3:40am UTC](https://forums.kodeco.com/t/challenge-create-async-googlyeyes-raywenderlich-com/114119/7 "2021-02-04T03:40:25Z")

</div>

Thank you Audrey for the prompt reply and clarification. Enjoying the tutorial!

---

<div class="post-metadata">

**Author:** ![idcrook](https://assets.chunter.kodeco.com/user_avatar/forums.kodeco.com/idcrook/32/93524_2.png) [@idcrook](https://forums.kodeco.com/u/idcrook)\
**Post date:** [February 11, 2021, 8:51pm UTC](https://forums.kodeco.com/t/challenge-create-async-googlyeyes-raywenderlich-com/114119/8 "2021-02-11T20:51:27Z")

</div>

An observation that may help other who might encounter the same: the face features **`CIDetector`** is not working for me on a iPhone Simulator on an M1 Mac mini.

It does work on an Intel Mac (2015 MBP) and on actual iOS devices.

- iOS Device running iOS 14.4: **WORKS**
- Xcode 12.4 / iOS 14.4 Sim / Intel Mac (macOS 11.2.1): **WORKS**
- Xcode 12.4 / iOS 14.4 Sim / M1 Mac mini (macOS 11.2.1): **DOES NOT WORK**

---

<div class="post-metadata">

**Author:** ![audrey](https://assets.chunter.kodeco.com/user_avatar/forums.kodeco.com/audrey/32/111607_2.png) [@audrey](https://forums.kodeco.com/u/audrey)\
**Post date:** [February 11, 2021, 9:20pm UTC](https://forums.kodeco.com/t/challenge-create-async-googlyeyes-raywenderlich-com/114119/9 "2021-02-11T21:20:02Z")

</div>

thanks David! I noticed this when I replied to Shruti from my M1, and discussed it with Caroline Begbie (Metal book author). We worked out the same conclusions, but then I forgot to post. Thanks so much for your post!

---

<div class="post-metadata">

**Author:** ![lucianboboc](https://assets.chunter.kodeco.com/user_avatar/forums.kodeco.com/lucianboboc/32/111788_2.png) [@lucianboboc](https://forums.kodeco.com/u/lucianboboc)\
**Post date:** [July 4, 2022, 1:44pm UTC](https://forums.kodeco.com/t/challenge-create-async-googlyeyes-raywenderlich-com/114119/10 "2022-07-04T13:44:32Z")

</div>

Hi Audrey,

Not sure why when calling asyncGooglyEyes, inside the block you dispatch fadeInNewImage on main thread. Isn’t the block already on main thread?

---

<div class="post-metadata">

**Author:** ![audrey](https://assets.chunter.kodeco.com/user_avatar/forums.kodeco.com/audrey/32/111607_2.png) [@audrey](https://forums.kodeco.com/u/audrey)\
**Post date:** [July 5, 2022, 5:38am UTC](https://forums.kodeco.com/t/challenge-create-async-googlyeyes-raywenderlich-com/114119/11 "2022-07-05T05:38:08Z")

</div>

hi Lucian, you’re right, but only because the default value of `completionQueue` is the main queue. I guess it’s just safer to maintain the habit of dispatching to main.
