i trying call function in security.framework, swift code. forgetting "error out" (last) parameter second, if call function this:
let accesscontrolref = secaccesscontrolcreateflags( kcfallocatordefault, ksecattraccessiblewhenunlockedthisdeviceonly, secaccesscontrolcreateflags.userpresence, nil ) i ge tht efollowing error:
cannot find initializer type 'secaccesscontrolcreateflags' accepts argument list of type '(cfallocator!, cfstringref, secaccesscontrolcreateflags, nil)'
...however, if reformat code following:
let allocator:cfallocatorref! = kcfallocatordefault let protection:anyobject! = ksecattraccessiblewhenunlockedthisdeviceonly let flags:secaccesscontrolcreateflags = secaccesscontrolcreateflags.userpresence let accesscontrolref = secaccesscontrolcreatewithflags( allocator, protection, flags, nil ) (specific types -e.g., cfallocatorref- taken function prototype on xcode's autocomplete)...it compiles no problem. what's going on?
next, the error parameter. should pass? migrating objective-c code, tempted pass following variable (prepended &, of course):
var accesscontrolerror:cferrorref! = nil ...which gives error:
cannot invoke 'secaccesscontrolcreatewithflags' argument list of type '(cfallocatorref!, anyobject!, secaccesscontrolcreateflags, inout cferrorref!)'
if, instead, pass following variable (again, prepended address-of operator):
var accesscontrolerror:unsafemutablepointer<unmanaged<cferror>?> (same type suggested prototype autocomplete), get:
cannot invoke 'secaccesscontrolcreatewithflags' argument list of type '(cfallocatorref!, anyobject!, secaccesscontrolcreateflags, inout unsafemutablepointer?>)'
...so, gives?
edit: forget error parameter. seems taking address twice (i.e., pointer pointer). instead, should this:
var accesscontrolerror:unsafemutablepointer<unmanaged<cferror>?> = nil // ^ 'pointer' let allocator:cfallocatorref! = kcfallocatordefault let protection:anyobject! = ksecattraccessiblewhenunlockedthisdeviceonly let flags:secaccesscontrolcreateflags = secaccesscontrolcreateflags.userpresence let accesscontrolref = secaccesscontrolcreatewithflags( allocator, protection, flags, accesscontrolerror // <- notice lack of '&' ) source: sample code within this answer.
(ok, nobody has added new insights in while, answer own question contents of last edit:)
answer: forget error parameter. seems taking address twice (i.e., pointer pointer). instead, should this:
var accesscontrolerror:unsafemutablepointer<unmanaged<cferror>?> = nil // ^ 'pointer' let allocator:cfallocatorref! = kcfallocatordefault let protection:anyobject! = ksecattraccessiblewhenunlockedthisdeviceonly let flags:secaccesscontrolcreateflags = secaccesscontrolcreateflags.userpresence let accesscontrolref = secaccesscontrolcreatewithflags( allocator, protection, flags, accesscontrolerror // <- notice lack of '&' )
Comments
Post a Comment