Swift3 ';自我';在swift 3.0中的super.init调用之前使用
我有一个子类Swift3 ';自我';在swift 3.0中的super.init调用之前使用,swift3,xcode8,ios10,init,outputstream,Swift3,Xcode8,Ios10,Init,Outputstream,我有一个子类OutputStream。因为我有两个init()方法,其中一个有前缀词convency 这是我的密码: class FileOutputStream : OutputStream { fileprivate let filepath:URL fileprivate let channel:DispatchIO! convenience init?(filename:String) { let pathURL = File
OutputStream
。因为我有两个init()
方法,其中一个有前缀词convency
这是我的密码:
class FileOutputStream : OutputStream
{
fileprivate let filepath:URL
fileprivate let channel:DispatchIO!
convenience init?(filename:String) {
let pathURL = FileManager.default.urls(for: FileManager.SearchPathDirectory.documentDirectory, in:.userDomainMask).first!.appendingPathComponent(filename)
self.init(filepath:pathURL)
}
init?(filepath f:URL) {
self.filepath = f
//if let path = f.path,
if let cpath = (f.path).cString(using: String.Encoding.utf8) {
let outputflag:Int32 = O_CREAT | O_WRONLY // create, write-only
let mode:mode_t = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH // permissions: u+rw, g+r, o+r
self.channel = DispatchIO(type: DispatchIO.StreamType.stream, path:cpath, oflag:outputflag,mode: mode, queue: DispatchQueue.global(qos: DispatchQoS.QoSClass.background)) { (errcode:Int32) -> Void in
if errcode != 0 {
print("FileOutputStream: error creating io channel")
}
}
}
else {
self.channel = nil
return nil
}
}
func write(_ string: String) {
if let dataString = string.data(using: String.Encoding.utf8) {
dataString.withUnsafeBytes {(bytes: UnsafePointer<UInt8>) -> Void in
var data = DispatchData.empty
data.append(bytes, count: dataString.count)
self.channel.write(offset: 0, data: data, queue: DispatchQueue.global(qos:.background), ioHandler: { (complete: Bool, data: DispatchData?, errorCode: Int32) in
//handle progress reporting here
if errorCode != 0 {
print("FileOutputStream: error writing data to channel")
}
})
}
}
}
deinit {
self.channel.close(flags: DispatchIO.CloseFlags.stop)
}
}
- 在这两种方法中,在方法的开头
- 在方法的末尾
- 只有第二种方法
- 仅在第一种方法中
init?(文件路径f:url)
方法的末尾使用super.init(url:f,append:false/true)
初始化器必须调用超级类的指定初始化器..调用OutputStream
类中可用的任何初始化方法
public init(toMemory: ())
public init(toBuffer buffer: UnsafeMutablePointer<UInt8>, capacity: Int)
@available(iOS 4.0, *)
public init?(url: URL, append shouldAppend: Bool)
public初始化(toMemory:())
public init(toBuffer缓冲区:UnsafeMutablePointer,容量:Int)
@可用(iOS 4.0,*)
public init?(url:url,append-shouldAppend:Bool)
在init?(文件路径f:url)
方法的末尾使用super.init(url:f,append:false/true)
初始化器必须调用超级类的指定初始化器..调用OutputStream
类中可用的任何初始化方法
public init(toMemory: ())
public init(toBuffer buffer: UnsafeMutablePointer<UInt8>, capacity: Int)
@available(iOS 4.0, *)
public init?(url: URL, append shouldAppend: Bool)
public初始化(toMemory:())
public init(toBuffer缓冲区:UnsafeMutablePointer,容量:Int)
@可用(iOS 4.0,*)
public init?(url:url,append-shouldAppend:Bool)