4

あなたの助けが必要です。このコードは Swift 3 でコンパイルされなくなりました

//: Let's set up the `sockaddr_in` C structure using the initializer.
var sin = sockaddr_in(
    sin_len: UInt8(sizeof(sockaddr_in)),
    sin_family: sa_family_t(AF_INET),
    sin_port: in_port_t(0),
    sin_addr: in_addr(s_addr: inet_addr(routerIP)),
    sin_zero: (0,0,0,0,0,0,0,0)
)

//: Now convert the structure into a `CFData` object.
let data = withUnsafePointer(&sin) { ptr in
    CFDataCreate(kCFAllocatorDefault, UnsafePointer(ptr), sizeof(sockaddr_in))
}

//: Create the `CFHostRef` with the `CFData` object and store the retained value for later use.
host = CFHostCreateWithAddress(kCFAllocatorDefault, data).takeRetainedValue()

「withUnsafePointer」の行を修正する必要がありますが、方法がわかりません。

私はこのようなことを試しました

    let data = withUnsafePointer(to: &sin) { ptr in
        CFDataCreate(kCFAllocatorDefault, UnsafePointer(ptr), MemoryLayout<sockaddr_in>.size)
    }

コンパイラは withMemoryRebound を使用する必要があると言いますが、どのようにですか? ありがとう

4

1 に答える 1

5

NSDataにはこれを支援する便利な方法があり、無料のブリッジングを利用して にキャストできますCFData

let data = NSData(bytes: &sin, length: MemoryLayout<sockaddr_in>.size) as CFData
于 2016-09-09T00:35:22.917 に答える