Unwrapping optional properties from an optional array of objects
There are several options, but in any case you can use

public func flatMap&lt;T&gt;(@noescape transform: (Self.Generator.Element) throws -&gt; T?) rethrows -&gt; [T]


which returns an array containing the non-nil results of applying the
transformation to all sequence elements.

For example

if let unwrappedPeople = people {
    for id in unwrappedPeople.flatMap({ $0.id }) {
        print(id)
    }
}


to iterate over the non-nil ids, or 

if let unwrappedPeople = people {
    let ids = unwrappedPeople.flatMap { $0.id }
    print(ids)
}


to get the non-nil ids as an array.

To get rid of the outer unwrapping/optional binding, you can use
optional chaining:

people?.flatMap({ $0.id }).forEach {
    print($0)
}


If people is nil, then flatMap() is not applied. Otherwise
it returns an array of the non-nil ids, which are enumerated with
forEach().

I think that all these methods (as well as your first method) are "Swifty",
you have to decide how compact your code should be.