[英]passing NSInpuStream and outputStream between views in swift
我有2个视图都需要一个NSInputStream和一个NSOutputStream变量,我的问题是我如何才能从第二个中的第一个获取输入流/输出流。
第一个ViewController
class ViewController: UIViewController,NSStreamDelegate{
var inputStream : NSInputStream!
var outputStrean : NSOutputStream!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.initNetworkCommunication()
}
func initNetworkCommunication() {
//here i init the both of them
}
}
现在,第二个服务器应该使用相同的东西,而不必再次在服务器中重新连接[执行相同的initNetworkCommunication]。
class ViewController2: UIViewController,NSStreamDelegate {
var inputStream : NSInputStream!
var outputStrean : NSOutputStream!
override func viewDidLoad() {
super.viewDidLoad()
inputStream = ???
outputStrean =???
}
}
我尝试使用吸气剂,但由于某些原因,我在函数调用中得到了一个额外的参数
更新:仔细查看后,我仍然面临这个问题。因为我使用的是我发起的读取和写入流
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault,"localhost",8023,&readStream,&writeStream)
inputStream = self.readStream!.takeUnretainedValue()
outputStrean = self.writeStream!.takeUnretainedValue()
在遵循一个建议并从第一个viewController中的一个读取流启动读取流后,我得到一个错误,它们为空。问题是我想避免单个用户到服务器的多个连接,目前这是唯一的它的工作方式
尝试这个。
您可以通过编写协议或将数据传递给ViewController类对象来获取它。
因此,让我们看看如何将数据传递给对象。
class ViewController1: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
func getViewController(storyBoard: NSString) -> UIViewController
{
var mystoryBoard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
var ViewControllerID : UIViewController = mystoryBoard.instantiateViewControllerWithIdentifier(storyBoard) as UIViewController
return ViewControllerID
}
func buttonClickedFunction()
{
var viewController2Object : ViewController2 = getViewController("ViewController2StoryBoardName") as ViewController2
viewController2Object.inputStream = "" // give the value which you want to pass to the ViewController2
viewController2Object.outputStream = ""// give the value which you want to pass to the ViewController2
self.presentViewController(viewController2Object, animated: true, completion: nil)
}
}
class ViewController2: UIViewController {
var inputStream : NSInputStream!
var outputStrean : NSOutputStream!
override func viewDidLoad() {
super.viewDidLoad()
inputStream // use this values in code
outputStream // use this values in code
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.