2016-09-23 70 views
0

我想在Swift 3.0中使用strlcpy,但一直收到錯誤「無法將類型'UnsafeMutablePointer < _>'的值轉換爲預期的參數類型'!UnsafeMutablePointer'」在Swift中使用C - 不能轉換類型的值'UnsafeMutablePointer <_>'

這裏是我的代碼

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)) 
    } 
} 

其中VidyoClientInEventLogIn是:

typedef struct VidyoClientInEventLogIn_ 
{ 
    /*! Portal URI, i.e. "https://example.test.com" */ 
    char portalUri[URI_LEN]; 
} VidyoClientInEventLogIn; 

回答

1

C數組是我以元組引入Swift。但是Swift中保留了C結構的內存佈局,因此可以使用第一個元組元素loginEvent.portalUri.0(其類型爲CChar,又稱爲Int8) 的地址 作爲目標地址。

您也可以直接傳遞夫特String作爲參數傳遞給函數 服用UnsafePointer<CChar>參數,臨時C字符串 表示被自動創建。

這簡化事情:

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

這工作!謝謝 – Lneuner

相關問題