Skip to content

Instantly share code, notes, and snippets.

@rizumita
Created December 15, 2017 00:16
Show Gist options
  • Save rizumita/439c1c53506e5d2b731209eb6714ab48 to your computer and use it in GitHub Desktop.
Save rizumita/439c1c53506e5d2b731209eb6714ab48 to your computer and use it in GitHub Desktop.
こういう実装はありなんだろうか。 #swift #CodePiece
struct Permission<Holder: PermissionHolder> {
let holder: Holder
}
protocol PermissionHolder {
var can: Permission<Self> { get }
}
extension PermissionHolder {
var can: Permission<Self> { return Permission(holder: self) }
}
struct User: PermissionHolder {
let id: Int64
}
struct Answer {
let userID: Int64
}
extension Permission where Holder == User {
func delete(_ answer: Answer) -> Bool {
return holder.id == answer.userID
}
}
let user = User(id: 1)
let answer1 = Answer(userID: 1)
user.can.delete(answer1) // true
let answer2 = Answer(userID: 2)
user.can.delete(answer2) // false
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment