相关疑难解决方法(0)

UIScrollView自定义分页大小

在UIScrollView中进行分页是一个很棒的功能,我需要的是将分页设置为较小的距离,例如我希望我的UIScrollView页面的大小小于UIScrollView的帧宽.谢谢

iphone objective-c uiscrollview ipad

41
推荐指数
5
解决办法
3万
查看次数

可以在Objective-c中访问的协议的扩展上定义Swift方法

是否可以从Objective-C调用Swift中协议扩展中定义的方法?

例如:

protocol Product {
    var price:Int { get }
    var priceString:String { get }
}

extension Product {
    var priceString:String {
        get {
            return "$\(price)"
        }
    }
}

class IceCream : Product {
    var price:Int {
        get {
            return 2
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

实例的价格字符串IceCream是'$ 2'并且可以在Swift中访问,但是该方法在Objective-C中不可见.编译器抛出错误'No visible @interface for'FlowCream'声明选择器......'.

在我的配置中,如果方法是直接在Swift对象的实现中定义的,那么一切都按预期工作.即:

protocol Product {
    var price:Int { get }
    var priceString:String { get }
}

class IceCream : Product {
    var price:Int {
        get {
            return 2
        }
    } …
Run Code Online (Sandbox Code Playgroud)

protocols objective-c swift protocol-extension

19
推荐指数
1
解决办法
8144
查看次数

Swift 3 ObjC在子类中不调用的可选协议方法

我有以下类层次结构:

class ScrollableViewController: UIViewController, UITableViewDelegate { // ... }
Run Code Online (Sandbox Code Playgroud)

这实现了一种UITableViewDelegate协议方法,例如tableView:willDisplayCellAt:

在我的SpecificScrollableViewController继承自的类中,ScrollableViewController新的可选协议方法不再被调用,例如tableView(_:heightForRowAt:)

cocoa-touch ios swift swift3 ios10

14
推荐指数
1
解决办法
4704
查看次数

非'@ objc'方法不满足带条件扩展的'@objc'协议的可选要求

我正在尝试使用条件扩展创建MKMapViewDelegate的默认实现,如下所示:

extension MKMapViewDelegate where Self: NSObject {
        func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
            ...
        }

        func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
            ...
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是当我编译代码时,我得到了警告

非'@ objc'方法'mapView(_:viewFor :)'不满足'@objc'协议'MKMapViewDelegate'的可选要求

我期望NSObject对'Self'的一致性意味着警告不会发生.除了警告之外,即使委托实例是UIViewController并且因此符合NSObject,也不会调用委托方法.

我是否误解了"哪里"在扩展中的作用?

swift swift-extensions

10
推荐指数
1
解决办法
3023
查看次数

非“@objc”方法不满足“@objc”协议的要求

我已将以下内容放入 Playground 中以尝试理解这一点,但我只是不这样做:

import Foundation

@objc protocol Sample {

    var value: Int { get set }

    func increase()
    func decrese()

}

extension Sample {

    func increase() {
        value += 1
    }

    func decrease() {
        value -= 1
    }

}

class Test: Sample {

    var value: Int = 0

}

Run Code Online (Sandbox Code Playgroud)

class该错误出现在声明旁边Test

非“@objc”方法“increase()”不满足“@objc”协议“示例”的要求

如果我在课堂上重新声明,increase()那么decrease()警告就会消失。或者如果我从协议中删除声明。有人可以解释一下吗?

编辑

我确实需要一个 Objective-C 类来遵守这个协议,因此一@objc开始就是这样。

ios swift

3
推荐指数
1
解决办法
2592
查看次数