2017-08-07 4 views
0

Est-il possible de se référer àSe référant aux paramètres de la fonction vararg Kotlin

permission.permissionName

dans ce code:

fun Activity.isPermissionGranted(vararg permission : AppPermission) = (PermissionChecker.checkSelfPermission(this, permission.permissionName) == PackageManager.PERMISSION_GRANTED) 

Comme je reçois est « référence non résolue: permissionName " Erreur.

AppPermission signature de classe ressemble à ceci:

sealed class AppPermission(val permissionName: String, 
          val requestCode: Int, 
          val deniedMessageId: Int, 
          val explanationMessageId: Int) {...} 

Pour être honnête, je ne suis même pas sûr si vous utilisez varargs ici est une bonne idée si elle est complètement cinglé s'il vous plaît me corriger. Fondamentalement, j'essaie d'implémenter la logique d'autorisation (s) pour Android> 5.0 et je ne suis pas sûr du nombre d'autorisations dont nous allons avoir besoin, c'est pourquoi j'ai pensé à utiliser varargs ici.

Répondre

1

vararg est fondamentalement juste du sucre syntaxique pour créer des tableaux. Ainsi, vous devez traiter le paramètre permission comme un Array<AppPermission>, ce qui signifie que vous pouvez faire:

fun Activity.isPermissionGranted(vararg permissions : AppPermission) = permissions.all { permission -> (PermissionChecker.checkSelfPermission(this, permission.permissionName) == PackageManager.PERMISSION_GRANTED) } 

Ici, all est une fonction de la bibliothèque standard qui calcule une Boolean pour chaque valeur dans la array et renvoie true si tous ces Boolean s sont true.