

Show HN: SwiftData – A SQLite library in Swift - greenbast
https://github.com/ryanfowler/SwiftData

======
chrisballinger
Have you guys seen YapDatabase [1]? It is an awesome Obj-C
key/value/collection store (and more) built on top of SQLite, that I
originally started using instead of Core Data for its easy SQLCipher support.
It's built by the venerable Robbie Hanson [2] who is well known for his
previous work: CocoaAsyncSocket, XMPPFramework, CocoaLumberjack, and
CocoaHTTPServer.

If you're tired of Core Data, I highly recommend reading the wiki [3] and
giving it a shot!

1\.
[https://github.com/yaptv/YapDatabase](https://github.com/yaptv/YapDatabase)
2\. [https://github.com/robbiehanson](https://github.com/robbiehanson) 3\.
[https://github.com/yaptv/YapDatabase/wiki](https://github.com/yaptv/YapDatabase/wiki)

~~~
seivan
I have a friend who uses it in production. He swears by and has tried to
convert me. I'm still sticking to CoreData with some categories for syntax
sugar, but I've been closely monitoring realm.io for the last couple of
days...

------
jicea
Hello,

Is there already a built-in package manager in Swift? Maybe CocoaPods will
have support for Swift but, as a completely new environnement, I'm hoping that
Apple will add a dependency manager for Swift.

~~~
greenbast
Currently, I'm not aware of one.

However, once Swift comes out of beta (and with some time) I think the best
practices to distribute libraries will become evident.

It would be great if Apple released a dependency manager for Swift, though!

~~~
dirtyaura
I think Apple should build the basic hooks so that package manager like
CocoaPods is possible but a better solution will emerge if the package system
is handled outside of Apple which is likely have a huge legal that prevents
healthy ecosystem.

------
tomasandrle
Nice to see some Swift wrappers. I don't like Core Data so this looks like an
option when writing iOS apps. For more portable code, here is my C++ wrapper
for SQLite:
[https://github.com/catnapgames/NLDatabase](https://github.com/catnapgames/NLDatabase)

------
a2tech
This is super slick. SQLite is so elegant, and this should stop people from
reinventing the wheel over and over again.

~~~
mayoff
I hope somebody reinvents this library.

I know it's hard to release something to the public, and easy to throw stones.
But I'm going to do it anyway. I just don't see the “elegance” in this library
and I see several problems with this library that make it unsuitable for
production use. Examples:

This library provides access to a singleton database. Did you want to choose
the location of your database? Sorry, it's going to be “SwiftData.sqlite” in
your app's Documents folder (if sandbox) or the user's “Documents” folder (if
not sandboxed). Did you want to use a SQLite3 database as your document
storage format, and let the user have multiple documents open simultaneously?
Sorry, not with this library.

This library doesn't use prepared statements. When you give it SQL with bind
placeholders and substitution values, it creates a new string that embeds the
values. Does your SQL statement have a string literal containing a `?`? Sorry,
this library will treat it as a bind placeholder anyway. (Example: the ? here
is not a placeholder: insert into x values ('?')) Did you want to use less
error-prone named placeholders, which SQLite3 supports natively? Sorry, not
with this library.

This library loads the entire result set of a query into an array and returns
it to you. Did you want to reduce your memory footprint? Sorry, not with this
library.

The library source code is full of copy-pasted code that should be unified.

Every enumeration case in the standard library (c.f. Bit, Character,
FloatingPointClassification, ImplicitlyUnwrappedOptional, MirrorDisposition,
Optional, QuickLookObject, UnicodeDecodingResult) starts with a capital
letter. This library's enumeration cases (c.f. DataType, Flags) start with
lower case letters.

------
quux
Nice project! anyone know how this compares to using an Objective-C sqlite
wrapper like FMDB from swift?

------
nathanwdavis
What's the advantage of using something like this over CoreData - which is
built in?

~~~
pokstad
CoreData actually has the option of using SQLite as the underlying datastore.
The other alternative is a proprietary binary store. I think there is also an
XML store. CoreData is an abstraction level higher than SQLite. It's similar
to an ORM or graph database where it manages the relationships between objects
for you. So if you don't need all the features of CoreData, SQLite is lighter
and simpler.

~~~
rimantas
SQLite is the default storage engine for CoreData.

------
melvinmt
Please highlight your swift code examples:

```swift

