Moh*_*din 31 inheritance ios swift
我可以在Swift with Extensions中实现它而不需要继承吗?我得到此错误扩展可能不包含存储的属性
extension UIButton
{
@IBInspectable var borderWidth : CGFloat
{
didSet{
layer.borderWidth = borderWidth
}
}
}
Run Code Online (Sandbox Code Playgroud)
dan*_*dan 54
您可以覆盖setter/getter,使其不是存储属性,只是将set/get转发给图层.
extension UIButton {
@IBInspectable var borderWidth : CGFloat {
set {
layer.borderWidth = newValue
}
get {
return layer.borderWidth
}
}
}
Run Code Online (Sandbox Code Playgroud)
Ale*_*der 11
扩展无法添加存储的属性.从文档(计算属性部分):
注意
扩展可以添加新的计算属性,但不能添加存储的属性,也不能将属性观察者添加到现有属性.
如果您需要存储属性,则应创建子类,如下所示:
class CustomButton : UIButton
{
@IBInspectable var borderWidth : CGFloat
{
didSet{
layer.borderWidth = borderWidth
}
}
}
Run Code Online (Sandbox Code Playgroud)
在 Swift 中,我导入了一个用 Objective-C 编写的静态库。下面的协议,在那个库中,有一个方法和一个属性。
@class Message;
@protocol LocalService
@property (readonly) int action;
- (Message *)getResponse:(Message *)request;
@end
Run Code Online (Sandbox Code Playgroud)
试图让一个类符合该协议,传递以下消息:
1-) 类型“ShowInitialViewLocalService”不符合协议“LocalService”
2-) 扩展可能不包含存储的属性
下面提供的代码解决了这个问题:
import UIKit
class ShowInitialViewLocalService: NSObject{
}
extension ShowInitialViewLocalService : LocalService {
var action: Int32 {
get { return View.InitialView.rawValue }
}
func getResponse(_ request: Message) -> Message {
let response = Response(source: request.target, target: request.source, relatedView: View.InitialView.rawValue, action: request.action, data: request.data)
return response
}
}
Run Code Online (Sandbox Code Playgroud)
我希望这会帮助某人。
| 归档时间: |
|
| 查看次数: |
38376 次 |
| 最近记录: |