Ios 如何正确使用面向对象语言Swift?
我对Swift甚至是面向对象编程语言本身都是新手。所以我的问题是,如何以正确的方式使用这种非常广泛的语言?我举一个例子来验证我的问题: 假设我有两门课:Ios 如何正确使用面向对象语言Swift?,ios,swift,delegates,swift2,Ios,Swift,Delegates,Swift2,我对Swift甚至是面向对象编程语言本身都是新手。所以我的问题是,如何以正确的方式使用这种非常广泛的语言?我举一个例子来验证我的问题: 假设我有两门课: 类ScanForBluetoth{}//处理要扫描BT设备的所有部分 class ScanForDevices: UIViewController, CBCentralManagerDelegate , CBPeripheralDelegate, UITableViewDelegate,UITableViewDataSource{} 类Bl
class ScanForDevices: UIViewController, CBCentralManagerDelegate , CBPeripheralDelegate, UITableViewDelegate,UITableViewDataSource{}
class Bluetooth: ScanForDevices{}
谢谢你的阅读 首先,我想指出的是,你们的命名约定真的不符合。在面向对象编程中,您希望类名是对象(名词)。您根据类所做的事情而不是它们是什么来命名它们。更好的类名称选择是BluetoothDeviceScanner,而不是设备扫描,以及BluetoothManager,而不是非显式的“bluetooth” 其次,您所做的是将bluetooth类子类化为scan for devices类,这使它继承其类的所有功能。这真的没有任何意义。子类化用于基于父对象创建一个对象,而这两个对象处理两个完全不同的事情,然后您仍然计划重写函数。相反,您应该在bluetooth类中单独包含所需的协议。尽可能将这两个类的功能分开 第三,应该将视图控制器功能与扫描功能分开。我的意思是“ScanForDevices”对象的任务是扫描设备,所以它不应该也有控制视图的任务。。。我将删除UIViewController协议并引入一个新的view controller类,在该类中,您可以拥有一个分配了“ScanForDevices”对象的属性,此时可以在viewcontroller中扫描设备,但扫描功能包含在单个对象中(这是最佳实践)
编辑 要“连接”数据,只需将BluetoothManager和BluetoothScanner对象作为属性提供给所需的任何视图控制器即可。因此,在viewcontroller中声明一些属性时,我通常使用optionals,这样就不必担心初始化属性(这意味着您需要在使用变量之前展开变量)。 在您的ViewController中
var bluetoothScanner: BluetoothScanner?
var bluetoothManager: BluetoothManager?
override func viewDidLoad() {
super.viewDidLoad()
bluetoothScanner = BluetoothScanner(init parameters)
bluetoothManager = BluetoothManager(init parameters)
}
您的对象现在已“连接”,即您可以在viewcontroller中访问它们及其所有属性/方法。现在我想起来了,你甚至不需要在这个层次上同时拥有两个对象。您可以将BluetoothScanner存储为BluetoothManager的属性,此时您只需要使用BluetoothManager对象来处理视图控制器级别的所有蓝牙需求
初始化方法
请记住,这些初始化方法都是虚构的,与您手头的问题无关,我试图说明这就是您定义初始化结构所需参数的地方。创建结构实例时,必须传递括号中相同的参数。首先,我想指出,您的命名约定确实不适用。在面向对象编程中,您希望类名是对象(名词)。您根据类所做的事情而不是它们是什么来命名它们。更好的类名称选择是BluetoothDeviceScanner,而不是设备扫描,以及BluetoothManager,而不是非显式的“bluetooth” 其次,您所做的是将bluetooth类子类化为scan for devices类,这使它继承其类的所有功能。这真的没有任何意义。子类化用于基于父对象创建一个对象,而这两个对象处理两个完全不同的事情,然后您仍然计划重写函数。相反,您应该在bluetooth类中单独包含所需的协议。尽可能将这两个类的功能分开 第三,应该将视图控制器功能与扫描功能分开。我的意思是“ScanForDevices”对象的任务是扫描设备,所以它不应该也有控制视图的任务。。。我将删除UIViewController协议并引入一个新的view controller类,在该类中,您可以拥有一个分配了“ScanForDevices”对象的属性,此时可以在viewcontroller中扫描设备,但扫描功能包含在单个对象中(这是最佳实践)
编辑 要“连接”数据,只需将BluetoothManager和BluetoothScanner对象作为属性提供给所需的任何视图控制器即可。因此,在viewcontroller中声明一些属性时,我通常使用optionals,这样就不必担心初始化属性(这意味着您需要在使用变量之前展开变量)。 在您的ViewController中
var bluetoothScanner: BluetoothScanner?
var bluetoothManager: BluetoothManager?
override func viewDidLoad() {
super.viewDidLoad()
bluetoothScanner = BluetoothScanner(init parameters)
bluetoothManager = BluetoothManager(init parameters)
}
您的对象现在“连接”在您有权访问的意义上