Well, then this is a wrong answer haha.
> Which is to say, a lot of questions are "products of their time", and posting modern answers to older questions sometimes requires assumptions about what the asker would have wanted. I'm not sure what the best solution is.
I think it probably depends on the exact question and details; there isn't really a good one-size-fits-all solution.
A question is considered a duplicate only when it's an exact duplicate. Sometimes question get closed as duplicates erroneously as they're not exact duplicates, just very similar, and this can be an issue, but I don't think that's the biggest problem on Stack Overflow, and a lot of questions really are exact duplicates.
A lot of these issues are kind of scaling issues: with about 7,000 questions every day, many of whom are not exactly stellar, it's pretty hard to deal with them all. For year I've argued that improvements in messaging and such would make a big improvement, and Stack Overflow is finally doing some work on that now. For example the comment was changed from "Possible duplicate of [other question]" to "Does this answer your question: [other question]". The latter is much more friendly and helpful. People don't mark questions as dupes to be mean, but just as the easiest way to guide you to an answer (hopefully...)
To be clear, it's the other way around—someone asked a question about Objective C, and people answered how to do it in Swift.
From the perspective of "it's good to post updated answers to older questions" this makes sense, because there's a decent chance the asker would have requested Swift if the question was asked today. But as it stands, the question lists Objective C.
Which is to say, a lot of questions are "products of their time", and posting modern answers to older questions sometimes requires assumptions about what the asker would have wanted. I'm not sure what the best solution is.