Advertisement · 728 × 90

Posts by Casually Concerned

How are you liking it so far? (That’s the resource I am considering for getting started with SwiftUI)

1 year ago 0 0 1 0

Dope! Any hot takes from the lesson?

1 year ago 0 0 0 0

I stand with the trans community. Pass it along.

1 year ago 28580 7079 518 519

This took me forever to wrap my head around and it all boiled down to my lack of understanding of the Swift language.

The more you know!

1 year ago 1 0 0 0
Post image

Now here's an enum *without* associated value types.

Since there are no associated value types the compiler says we can compare instances of this Error type and slaps on the Equatable protocol at compile time.

1 year ago 0 0 1 0
Post image

As it turns out, in Swift, enums with no associated values get free Equatable synthesis!

Here is an enum *with* associated value types:

1 year ago 0 0 1 0

So what the heck was going on?

Somehow, the compiler is saying that RemoteFeedLoader.Error conforms to Equatable.

This led me to believe that the compiler was auto-synthesizing RemoteFeedLoader.Error's conformance to Equatable.

But what conditions need to be met in order for that to happen?

1 year ago 0 0 1 0
Post image

We could explicitly conform RemoteFeedLoader.Error to Equatable like so, but apparently we don't need to? 🤔

1 year ago 0 0 1 0
Post image

Here's the FeedLoader protocol's implementation class, RemoteFeedLoader.

No where in this code did we explicitly conform the Error type to Equatable:

1 year ago 0 0 1 0

On the surface it makes sense: LoadFeedResult is Equatable if the Error in the failure case is Equatable.

This means that the protocol's associatedtype Error need to conform to Equatable, which means that whatever class implements the protocol need to have an Equatable Error type.

1 year ago 0 0 1 0
Advertisement

If we uncomment the conditional conformance (the commented out line above), then the compiler error goes away 🫰, and we can compare LoadFeedResult types using XCTAssertEqual.

1 year ago 0 0 1 0
Post image Post image

The puzzle 🧩:

Whenever I commented out the following line in the interface boundary, I would then get the accompanying compile-time error in the test code:

1 year ago 0 0 1 0

Day 6 of #100DaysOfCode

Log: github.com/webdavis/100...

Understanding the Swift compiler!

Last week I was struggling to understand how the Swift compiler was auto-synthesizing conformance to Equatable for an enum result type.

#code #swift #learning #compiler

1 year ago 3 0 1 0

No worries haha, still fun 👏

1 year ago 1 0 0 0

This is really interesting and reminds me how developers go from user stories to use cases. Seems every domain has its techniques for dialing in. Great stuff!

1 year ago 1 0 1 0
Post image

😆 I won’t be passing any Ophthalmology tests, but I enjoyed the UI! Great work!

1 year ago 1 0 1 0

1. What testing framework I should use.

2. If it’s is a class-per-test framework (e.g. the JUnit approach) or not.

3. If the language supports interfaces/protocols. If not, then what does it use to achieve composition?

1 year ago 2 0 0 0

Taking a break today—my sleep debt is piling up 😵‍💫 📈

However, I've found these posts really improve my understanding of things.

That being said, I want to get better at TDD. Currently, I don’t “think it” as well as I would like to, but these posts could help me change that.

Maybe that's the move.

1 year ago 0 0 0 0

This is some next level nerdom. Bravo 👏

1 year ago 1 0 0 0
Advertisement

Argghh!

I said all this and realized that I didn't make it very clear that I am referring specifically to the "try?" syntax.

You can see it in the first code snippet as follows:

let root = try? JSONDecoder().decode(Root.self, from: data)

(I'M TIRED lol)

1 year ago 0 0 0 0

Lolz 😂

1 year ago 1 0 0 0

Seems kinda convoluted! Also, now we have to force unwrap root.

Maybe that's why the Swift team implemented this.

(Side note: I usually hate reading documentation, but the Swift team actually does a really good job at it.)

(7/7)

1 year ago 0 0 1 0
Post image

(6/7)

Now let's see what it would be like to implement the same behavior without this syntax. We could convert this to a do-catch block, like so:

1 year ago 0 0 1 0

Here is what the Apple docs say about it:

"You use try? to handle an error by converting it to an optional value. If an error is thrown while evaluating the try? expression, the value of the expression is nil."

(5/7)

1 year ago 0 0 1 0

This is because Swift allows us to convert errors to optional values.

In this case we would rather throw our own domain-specific error. We don't care about the DecodingError thrown by decode().

So instead, if decode throws an error we instruct Swift to convert it to an optional value `nil`.

(4/7)

1 year ago 0 0 1 0
Post image


(3/7)

Take a look at the following static function. Why isn't there a do-catch block to catch the potential error that JSONDecoder().decode throws?

1 year ago 0 0 1 0

Converting an error to an optional value is a great way to handle situations where we want to throw a domain-specific error in favor of a third-party error that we don't control (e.g. DecodingError thrown by JSONDecoder().decode).

(2/7)

1 year ago 0 0 1 0
Advertisement

Day 5 of #100DaysOfCode

Learned about Swift.Error, including error handling in Swift, as well as generics.

Today I'll focus a specific case:

❌❓ Handling Errors by Converting them to Optional Values

Let's get to it!

(1/7)

1 year ago 4 0 1 0

Do you have any favorites from the freecodecamp podcast that you recommend?

1 year ago 1 0 0 0

Hey Zero,

Thanks for connecting! I followed you back 🥳

I totally get it—these topics are tricky for me too! That’s why I post about them; rubber ducking helps me process.

If something’s unclear, it might mean I haven’t explained it well. Feel free to ask or point it out! Let’s learn together 🙂

1 year ago 0 0 0 0