2016-09-23 8 views

答えて

1

Cアレイは、私は次のとおりです: '!UnsafeMutablePointer'」

ここVidyoClientInEventLogInがある私のコード

func login(portal: String, username: String, password: String) { 
    var loginEvent = VidyoClientInEventLogIn() 
    let portalCArray = UnsafeMutablePointer<Int8>(mutating: (portal as NSString).utf8String!) 
    withUnsafeMutablePointer(to: &loginEvent.portalUri) { 
     strlcpy($0, portalCArray, MemoryLayout.size(ofValue: $0)) 
    } 
} 

ですタプルとしてSwiftに移植されました。しかし、 のC構造体のメモリレイアウトはSwiftに保存されているため、最初のタプル要素loginEvent.portalUri.0CChar aka Int8)のアドレス をターゲットアドレスとして使用できます。

また、あなたはUnsafePointer<CChar>パラメータ、 表現が自動的に作成された一時的なCの文字列を取る機能 への引数として直接スウィフトStringを渡すことができます。

これはに物事を簡素化:これは動作します

func login(portal: String, username: String, password: String) { 
    var loginEvent = VidyoClientInEventLogIn() 
    strlcpy(&loginEvent.portalUri.0, portal, MemoryLayout.size(ofValue: loginEvent.portalUri)) 
} 
+0

!ありがとうございました – Lneuner

関連する問題