继承自@objc协议。

3
我有这个协议继承。
@objc protocol Base {}

protocol Some : Base {}

检查它的代码 main.swift:

import Foundation

class Model1 : NSObject {}

extension Model1 : Some {}


class Model2 : NSObject, Some {}


func test() {
    let m1: NSObject = Model1()
    let m2: NSObject = Model2()

    print("m1 is Some? \(m1 is Some)")
    print("m2 is Some? \(m2 is Some)")

    print("m1 is Base? \(m1 is Base)")
    print("m2 is Base? \(m2 is Base)")
}

test()

有趣的是,swiftcswift的输出不同。
swiftc main.swift && ./main
m1 is Some? true
m2 is Some? true
m1 is Base? false
m2 is Base? false

对比

swift main.swift
m1 is Some? true
m2 is Some? true
m1 is Base? true
m2 is Base? false

但问题是 - 为什么我无法将它们中的任何一个转换为Base

如果我向Some添加@objc,那么每个测试都将通过true。但目前我不能这样做,这是另一个SO的话题(请参见此处)。

swiftc --version
Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1)
Target: x86_64-apple-macosx10.9

你的问题有点奇怪:首先你证明了swiftswiftc之间的不一致行为,然后你又转向了一个有些不相关的问题。你尝试过将它们强制转换为Base吗?发生了什么? - idmean
@idmean每个print都有is运算符。"is运算符在运行时检查表达式是否可以转换为指定的类型。" - paiv
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接