Interfaces de Struct/Recurso
Podemos definir e implementar interfaces em structs ou recursos.
Se um tipo é restrito por uma interface, você só pode acessar as variáveis/funções especificadas por essa interface.
cadence
pub contract Test {
pub resource interface INFT {
pub var name: String
pub fun updateNumber(newNumber: Int)
}
// implement the interface with `: INFT`
pub resource NFT: INFT {
pub var name: String
pub var number: Int
pub fun updateNumber(newNumber: Int) {
self.number = newNumber
}
init() {
self.name = "Spongebob"
self.number = 1
}
}
pub fun noInterface() {
let nft: @NFT <- create NFT()
nft.updateNumber(newNumber: 5)
log(nft.number) // 5
destroy nft
}
pub fun yesInterface() {
let nft: @NFT{INFT} <- create NFT()
nft.updateNumber(newNumber: 5)
/*
ERROR - NOT ALLOWED: `number` does not belong to the interface type
log(nft.number)
*/
destroy nft
}
}