Class extension issues (Xcode 7.3 (7D175))


(Victor Leong) #1

Hey guys,

I'm starting to see problems related struct namespacing with extensions.
For example:

I have the following definition in file: "aaa.swift":
public struct aaa {
   public struct bbb {
      public struct ccc{
      ...
      }
   }
}

I have a second find: "bbb.swift" that tries to use:
aaa.bbb.ccc but it would say ccc is not a member of aaa.bbb.

If I move the code to file "aaa.swift" then the compile would work.

What I noticed is that this isn't deterministic either, it would happen for
only a few namespaces in certain files.

Am I doing something wrong?

Thanks,
*Victor Leong *|* Software Developer*
victor.leong@visiercorp.com


(Zhao Xin) #2

Is this a correct useage of namespace? As far as I know, there is not a
solution for namespace in Swift. Or should I say that Swift is not support
namespace?

Zhaoxin

···

On Wed, Jun 8, 2016 at 7:48 AM, Victor Leong via swift-users < swift-users@swift.org> wrote:

Hey guys,

I'm starting to see problems related struct namespacing with extensions.
For example:

I have the following definition in file: "aaa.swift":
public struct aaa {
   public struct bbb {
      public struct ccc{
      ...
      }
   }
}

I have a second find: "bbb.swift" that tries to use:
aaa.bbb.ccc but it would say ccc is not a member of aaa.bbb.

If I move the code to file "aaa.swift" then the compile would work.

What I noticed is that this isn't deterministic either, it would happen
for only a few namespaces in certain files.

Am I doing something wrong?

Thanks,
*Victor Leong *|* Software Developer*
victor.leong@visiercorp.com

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users


(Jordan Rose) #3

Hey, Victor. This is a longstanding issue that has to do with us resolving extensions very early in compilation; there are a handful of reports on JIRA and Radar but no one's really had the chance to look into it. The issues should be inconsistent but deterministic, i.e. it would only affect some files and not others, but it won't change from affecting one file to not affecting it if there are no changes in the code.

The safest workaround is to define your types at the top-level and use typealiases to make them nested, and have the extensions refer to the top-level type.

Sorry for the inconvenience,
Jordan

···

On Jun 7, 2016, at 16:48, Victor Leong via swift-users <swift-users@swift.org> wrote:

Hey guys,

I'm starting to see problems related struct namespacing with extensions. For example:

I have the following definition in file: "aaa.swift":
public struct aaa {
   public struct bbb {
      public struct ccc{
      ...
      }
   }
}

I have a second find: "bbb.swift" that tries to use:
aaa.bbb.ccc but it would say ccc is not a member of aaa.bbb.

If I move the code to file "aaa.swift" then the compile would work.

What I noticed is that this isn't deterministic either, it would happen for only a few namespaces in certain files.

Am I doing something wrong?

Thanks,
Victor Leong | Software Developer
victor.leong@visiercorp.com <mailto:victor.leong@visiercorp.com>

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users